Oii, Jonas, tudo bem?
Vou deixar aqui uma sugestão. Caso ainda tenha dificuldades, peço que me informe o curso (e a aula) ou se é um projeto pessoal, tá bem? =)
Antes de tudo, é importante garantir que o objeto Principal
que você está obtendo da autenticação seja do tipo UserDetails
ou um objeto que possua as informações do usuário logado. Você pode fazer um ajuste no seu código para obter o ID do usuário logado diretamente da autenticação.
Um exemplo abaixo:
public DadosDetalhamentoPostagem postar(DadosPostagem dados) {
var authentication = SecurityContextHolder.getContext().getAuthentication();
System.out.println("authentication: " + authentication);
if (authentication != null && authentication.isAuthenticated()) {
Object principal = authentication.getPrincipal();
if (principal instanceof UserDetails) {
UserDetails userDetails = (UserDetails) principal;
String username = userDetails.getUsername();
System.out.println("Usuário logado: " + username);
Optional<Usuario> usuarioOptional = usuarioRepository.findByLogin(username);
Usuario autor = usuarioOptional.orElseThrow(() -> new ValidacaoException("Usuário não encontrado"));
validador.forEach(v -> v.validador(dados));
var postagem = new Postagem(dados, autor);
postagemRepository.save(postagem);
return new DadosDetalhamentoPostagem(postagem);
} else {
throw new ValidacaoException("Usuário não autenticado");
}
} else {
throw new ValidacaoException("Autenticação não encontrada");
}
}
Ali em cima nós verificamos se o principal
da autenticação é uma instância do UserDetails
. Se for, obtemos o nome de usuário e, em seguida, buscamos o usuário no repositório pelo login.
Ah! E importante: veja se o seu UserDetailsService
está retornando um objeto UserDetails
que contenha o nome de usuário correto.
Abraços!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.