Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Customização response 403 Spring Security

Fala galera!

Segue a minha situação:

Tenho uma aplicação com autenticação JWT. A autenticação é feita na base de dados e eu preciso adicionar agora mais 2 validações: contagem insucesso no login e dispositivo cadastrado. Para fazer isso, criei uma classe CustomDaoAuthenticationProvider exetemdendo do DaoAuthenticationProvider (esse segundo fornecido no Spring).

Dentro dessa classe, sobrecrevi o método additionalAuthenticationChecks e escrevi as devidas validações, cada uma lançando um exceção diferente (LockedException e BadCredentialsException - ambas filhas de AuthenticationException)

O que eu preciso:

O retorno do request vir com a respectiva mensagem de validação.

O que está ocorrendo:

Em caso de insucesso, o retorno vem sempre o seguinte:

{
    "timestamp": 1548779620976,
    "status": 403,
    "error": "Forbidden",
    "message": "Access Denied",
    "path": "/app/api/v1.1/login"
}

O que já tentei fazer para resolver o caso:

  • No JWTLoginFilter sobrescrevi o método unSuccessfulAuthentication e fiz um response.sendError(). Resultado: o método até é chamado, mas a mensagem padrão continua retornando.
  • No JWAuthenticationFilter coloquei um bloco de try/catch em volta da chamada do autenticate visando capturar e lançar a exceção, mas isso não ocorre visto que, aparentemente, o tratamento da exceção ocorre antes.
  • Criei um CustomAuthenticationEntryPoint seguindo o sugerido em: https://stackoverflow.com/questions/48306302/spring-security-creating-403-access-denied-custom-response. A mensagem atá mudou, mas alguma outra exceção se sobrepôs à minha e o retorno foi:
    {
      "message": "Full authentication is required to access this resource",
      "timestamp": 1548780759071,
      "status": 403
    }
    `
    Nesse último caso setei no value do message a mensagem presenta na minha exceção.

Alguém tem alguma ideia de como posso resolver esse caso? Desde já agradeço a atenção de vocês.

1 resposta
solução!

Olá Cássio, talvez lhe ajude a estratégia deste artigo (item 4):

https://www.baeldung.com/exception-handling-for-rest-with-spring

Centralizar o tratamento de exceção.

Espero que ajude.