Caso no header não seja enviado um token, acho mais apropriado retornar um 401 Unauthorized ou 403 Forbidden, em vez de um erro 500 do servidor.
Tentei implementar da forma abaixo, mas continua retornando o código 500. Qual seria a maneira de fazer isso?
Criei uma nova Exception:
public class AutenticacaoException extends RuntimeException {}
Lancei essa Exception no método de obterToken na classe SecurityFilter
String authHeader = request.getHeader("Authorization");
if (authHeader == null) {
throw new AutenticacaoException("Usuário não autenticado.");
}
Na classe ErrorHandler, adicionei um novo método para tratar essa exceção:
@ExceptionHandler(AutenticacaoException.class)
public ResponseEntity<String> handleAutenticacaoException(AutenticacaoException exception) {
return ResponseEntity.status(401).body(exception.getMessage());
}
Retorno:
{
"timestamp": "2023-04-16T16:38:50.151+00:00",
"status": 500,
"error": "Internal Server Error",
"message": "Usuário não autenticado.",
"path": "/medicos"
}
Aparentemente a exceção não está caindo no ExceptionHandler, por algum motivo que desconheço. Continua retornando o status code 500, apesar de eu ter parametrizado para retornar 401.