Olá Murilo, tudo bem?
Esse erro 403 (Forbidden) geralmente indica que a autenticação falhou ou que as permissões necessárias não foram concedidas. Vamos revisar alguns pontos importantes para resolver esse problema.
- Configuração de Segurança:
- Certifique-se de que o endpoint
/login está permitido para todos os usuários. Você pode fazer isso adicionando a configuração authorizeRequests na sua classe de configuração de segurança.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf(AbstractHttpConfigurer::disable)
.authorizeRequests(authorizeRequests ->
authorizeRequests.antMatchers("/login").permitAll() // Permitir acesso ao endpoint de login
.anyRequest().authenticated()
)
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.build();
}
Classe de Usuário:
- Certifique-se de que a implementação da interface
UserDetails está correta. Parece que está tudo certo com a classe Usuario, mas verifique se todos os métodos necessários estão implementados corretamente.
Autenticação:
- Verifique se o método de autenticação está configurado corretamente. Você pode adicionar um
UserDetailsService para carregar os detalhes do usuário.
@Service
public class UsuarioService implements UserDetailsService {
@Autowired
private UsuarioRepository usuarioRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return usuarioRepository.findByLogin(username)
.orElseThrow(() -> new UsernameNotFoundException("Usuário não encontrado"));
}
}
- Configuração de Autenticação:
- Certifique-se de que o
UserDetailsService está sendo usado na configuração de segurança.
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http, BCryptPasswordEncoder bCryptPasswordEncoder, UserDetailsService userDetailsService)
throws Exception {
return http.getSharedObject(AuthenticationManagerBuilder.class)
.userDetailsService(userDetailsService)
.passwordEncoder(bCryptPasswordEncoder)
.and()
.build();
}
- Encoder de Senha:
- Verifique se o encoder de senha está configurado corretamente. Parece que você já está usando o
BCryptPasswordEncoder, o que é ótimo.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
Se todos esses pontos estiverem corretos e o problema persistir, pode ser útil que você compartilhe todo o seu projeto, via GitHub ou Drive do Google, para que eu realize testes para identificar o que está causando esse problema.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.