Abbiamo recentemente iniziato a utilizzare l'annotazione @PreAuthorize
con i nostri endpoint REST. Funziona alla grande, tuttavia, ho avuto una domanda riguardante il codice HTTP restituito quando ho emesso un GET contro un POST o PUT. Sembra che quando un utente non è autorizzato ad accedere all'endpoint REST del controller che lo stato HTTP restituito è diverso per GET e PUT/POST.405 vs 403 restituiti da Spring Controller quando si utilizza @PreAuthorize
Così, ad esempio, se ho un endpoint che è un GET e ha un'annotazione @PreAuthorize
e l'utente non ha accesso, viene restituito un 403 Proibito. Questo è quello che mi aspetto.
Se la stessa annotazione viene quindi posizionata su un metodo controller che è un POST o un PUT, la risposta HTTP è 405 Metodo non consentito (notare che, se correttamente autorizzato, il metodo POST/PUT restituisce 200 come previsto).
quando si passa tramite il codice è possibile vedere che il filtro titolo sottostante restituisce un 403, ma nello scenario POST/PUT il codice di stato è sceso/ignorato e sostituito con un 405, proprio come si fa quando un NullPointerExcpetion
verifica in il tuo codice del controller.
È questo il comportamento previsto o dovrebbe essere sempre restituito un 403 Proibito per gli utenti che non hanno accesso a un punto finale?
Ho lo stesso problema – pinkpanther
Mi sembra che il 405 venga lanciato dal [livello di sicurezza Web] (http://docs.spring.io/spring-security/site/docs/ 3.0.x/reference/el-access.html # el-access-web) piuttosto che il livello di controllo di accesso tramite le annotazioni @PreAuthorize. Prova ad abilitare il livello di debug al pacchetto org.springframework.security per vedere cosa sta realmente succedendo lì – danielgpm
penso che il tuo tipo di metodo di richiesta non sia corretto –