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

Como capiturar esse erro de senha ou login invalido

Como capiturar esse erro de senha ou login invalido, teria como mandar um exemplo:

3 respostas

Oi!

Você deseja capturar em que sentido? Seria apenas para realizar um debug e identificar algum problema que não conseguiu resolver, ou seria para realizar um novo tratamento de erros, que será retornado na resposta da requisição?

Seria um tratamento de erro caso o ligin ou a senha seja digitado de forma incorreta

solução!

Na classe de tratamento de erros, precisa adicionar mais métodos:

@ExceptionHandler(BadCredentialsException.class)
public ResponseEntity tratarErroBadCredentials() {
    return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Credenciais inválidas");
}

@ExceptionHandler(AuthenticationException.class)
public ResponseEntity tratarErroAuthentication() {
    return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Falha na autenticação");
}

@ExceptionHandler(AccessDeniedException.class)
public ResponseEntity tratarErroAcessoNegado() {
    return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Acesso negado");
}

E na classe de configurações de segurança, precisa fazer um tratamento específico também:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http.csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().authorizeHttpRequests()
            .requestMatchers(HttpMethod.POST, "/login").permitAll()
            .anyRequest().authenticated()
            .and().exceptionHandling().authenticationEntryPoint(authenticationEntryPoint())
            .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
            .build();
}

@Bean
public AuthenticationEntryPoint authenticationEntryPoint() {
    return new UnauthorizedEntryPoint();
}

E criar a classe de tratamento de erro de autenticação:

public class UnauthorizedEntryPoint implements AuthenticationEntryPoint {

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException ex) throws IOException, ServletException {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Access Denied");
    }

}