2014-06-09 7 views
9

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?

+1

Ho lo stesso problema – pinkpanther

+1

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

+0

penso che il tuo tipo di metodo di richiesta non sia corretto –

risposta

0

È possibile che da qualche parte tra la richiesta venga reindirizzata internamente e finisca su un endpoint che si aspetta un tipo di richiesta HTTP diverso e quindi si ottiene un HTTP 405. Ho visto che questo ha il più comune Motivo in caso di autenticazioni

Problemi correlati