Utilizzando un filtro personalizzato Spring Security, desidero restituire un codice di errore HTTP 401 se l'intestazione HTTP non contiene una particolare coppia chiave-valore.Return HTTP Error 401 Code & Skip Filter Chains
Esempio:
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
final String val = request.getHeader(FOO_TOKEN)
if(val == null || !val.equals("FOO")) {
// token is not valid, return an HTTP 401 error code
...
}
else {
// token is good, let it proceed
chain.doFilter(req, res);
}
quanto ho capito, ho potuto effettuare le seguenti operazioni:
(1) ((HttpServletResponse) res).setStatus(401)
e saltare la catena dei filtri rimanente
O
(2) laterale un'eccezione che, alla fine, porta a Spring Security lanciando un errore 401 al client.
Se # 1 è l'opzione migliore, come posso saltare la catena di filtri dopo aver chiamato setStatus(401)
nella risposta?
Oppure, se la # 2 è la giusta strada da percorrere, quale eccezione dovrei lanciare?
Se si ritorna dal metodo dopo 'setStatus' che interrompe l'ulteriore elaborazione della richiesta. La catena di filtri procede solo se chiami "chain.doFilter". –
Grazie Luca. Ci proverò. Pubblica come risposta? Puoi anche postare un riferimento per poter leggere di più? –