Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Padronização do retorno da API com Spring Security

Eu notei que após a adição e configuração do Spring Security a API retorna o erro 403 quando ocorre uma exceção no servidor ao invés do erro 500, esse comportamento está correto? O mesmo ocorre quando o usuário não consegue realizar o login, a API não deveria retornar outra resposta ao invés do erro 403?

4 respostas

Oi Andreick!

Verdade! Como não foi feito o tratamento de erro 500, os filtros do spring security acabam capturando a exception e devolvendo erro 403.

Precisa adicionar mais esse método na classe TratadorDeErros:

@ExceptionHandler(Exception.class)
public ResponseEntity tratarErro500(Exception ex) {
    return ResponseEntity.internalServerError().body(ex.getMessage());
}

Oi Rodrigo!

O tratamento funciona com as exceptions lançadas dentro dos controllers, mas não estou conseguindo capturar as exceptions do SecurityFilter, como a JWTVerificationException, o Spring Security ainda está capturando antes e devolvendo o 403.

solução!

No caso da requisição não incluir um token, ou incluir mas ele estiver inválido ou expirado, o retorno do 403 já é suficiente para indicar o problema para o cliente que disparou a requisição.

Mas caso você queira personalizar esse comportamento e deseja tratar as exceptions do Spring Security, vai ser necessário configurar na classe SecurityConfigurations. Exemplo:

//parte anterior do codigo omitida
.and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
    .exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPoint() {
        @Override
        public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
            response.setStatus(400);
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write("Token JWT inválido, expirado ou ausente!");
        }
    })
.and().build();

Funcionou, valeu Rodrigo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software