Я хотел бы получить электронное письмо с именем пользователя в моем приложении, чтобы указать пользователя, отправляющего сообщение. Я решил использовать типичный метод, то есть принципал и getUsername ():
@PostMapping("/messages/{id}")
@ResponseStatus(HttpStatus.CREATED)
public MessageDTO addOneMessage(@RequestBody MessageRequest messageRequest, @PathVariable ("id") Long id) {
checkIfChannelExists(id);
String content = messageRequest.getContent();
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String username = ((UserDetails) principal).getUsername();
Employee author = employeeRepository.findByEmail(username).get();
Message message = new Message(content, author, id);
messageRepository.save(message);
return new MessageDTO(message);
}
и MessageRequest.java:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageRequest {
@NonNull
private String content;
}
Но, таким образом, я все еще получаю:
"message": "java.lang.String cannot be cast to org.springframework.security.core.userdetails.UserDetails"
Что не так в моей реализации? Чтобы быть более точным, я использую Postman для проверки POST-запросов:
{
"content": "something"
}