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:
Nesse último caso setei no value do message a mensagem presenta na minha exceção.{ "message": "Full authentication is required to access this resource", "timestamp": 1548780759071, "status": 403 } `
Alguém tem alguma ideia de como posso resolver esse caso? Desde já agradeço a atenção de vocês.