2016-07-27 13 views
1

Mein Controller:'Löschen' Methode wird nicht mit Feder unterstützt

@RequestMapping(value = "/list/{fn}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody ResponseEntity<Record> deleteUser(@PathVariable("fn") String filename) { 
    System.out.println("Fetching & Deleting data " + filename); 

    Record user1 = rep.findByfilename(filename); 
    if (user1 == null) { 
     System.out.println("Unable to delete." + filename + " not found"); 
     return new ResponseEntity<Record>(HttpStatus.NOT_FOUND); 
    } 

    rep.deleteByfilename(filename); 
    return new ResponseEntity<Record>(HttpStatus.NO_CONTENT); 
} 
} 

Mein js Code:

$scope.del = function (record) { 
     if (confirm('Do you really want to delete?')){ 
      $http['delete']('/camera/list/' + record.filename).then(function() { 
       $scope.records.splice($scope.records.indexOf(record), 1); 
      }); 
     } 
     }; 

Mein Zugang Einstellung:

http 
    .authorizeRequests() 
    .antMatchers("/", "/home").permitAll() 
    .antMatchers("/imageview", "/hello").access("hasRole('USER')") 
    .antMatchers("/camera/list").permitAll() 
    .antMatchers("/camera/store").permitAll() 
    .antMatchers("/camera/list/{fn}").permitAll() 
    .antMatchers("/imageview2", "/hello2").access("hasRole('ADMIN')").and() 
    .formLogin().and().exceptionHandling() 
    .accessDeniedPage("/access-denied"); 

    http 
     .authorizeRequests() 
      .antMatchers("/", "/home").permitAll() 
      .anyRequest().authenticated() 
      .and() 
     .formLogin() 
      .loginPage("/login").permitAll() 
      .and() 
     .logout() 
      .permitAll(); 
} 

Der Fehler ich erhalte ist:

DELETE 
XHR 
http://localhost:8086/camera/list/a0c8918e4b088de4a5c7796e3eb11229 [HTTP/1.1 405 Method Not Allowed 22ms] 

Zuerst kann meine Löschfunktion funktionieren, aber nachdem ich die Federsicherheit verwende, habe ich diesen Fehler bekommen, der nicht unterstützt wird. Jeder kann helfen? Ich habe versucht, online nach Hilfe zu suchen, aber keine Lösung.

Antwort

0

Ich habe das Problem gerade gelöst, indem ich http.csrf(). Disable() hinzugefügt habe, um die Sicherheitseinstellungen zu ändern.

0

Fügen Sie Ihrer web.xml HiddenHttpMethodFilter hinzu.

+0

Ich habe keine web.xml-Datei –

+0

Dann in Ihrer Klasse WebApplicationInitializer implementieren – Alexander

+0

Erstellen Sie eine neue Klasse richtig? –

0

Versuchen Sie, ein Wildcard-Muster wie /camera/list/** für den antMatcher anstelle des Musters zu verwenden, das zum Definieren der config config (/camera/list/{fn}) verwendet wird, um Zugriff auf die spezifischen Elemente zu ermöglichen.

+0

Immer noch der gleiche Fehler –

+0

Ihre Controller-Klasse hat das 'RequestMapping' für'/camera' zugewiesen, richtig? Die Annotation der Methode deklariert nur '/ list/{fn}'. Seien Sie sich bewusst, dass Spring eine 405 zurückgibt, wenn Sie etwas anderes tun als "GET" auf einer ungültigen URL ... –

+0

Ich denke, dass Federsicherheit mich davon abhält, delete-Methode zu verwenden. –