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 ✓.