У меня есть несколько идей по решению данной задачи. Какая из них корректная не скажу, но тем не менее решит ваши задачи.
Итак,
Для начала создадим controllerAdvice
@RequiredArgsConstructor
@ControllerAdvice
public class GlobalControllerAdvice {
private final UserServiceImpl userServiceImpl;
@ModelAttribute("currentUser")
public User getUserProfile(
@AuthenticationPrincipal UserDetails currentUser
) {
if (currentUser != null)
return (User) userServiceImpl.findUserByEmail(currentUser.getUsername());
return null;
}
}
Теперь, нам доступна переменная
${currentUser}
(текущий авторизованный пользователь)
Далее, допустим, что мы хотим на клиенте отобразить иконку редактирования по клику на которую пользователь сможет отредактировать комментарий.
Когда вы в html (в шаблонизаторе) циклом выводите список комментариев, то просто сравните текущего авторизованного пользователя и автора каждого комментария. Если equals(), то показываем иконку редактирования, а если нет, то не показываем.
Например, для thymeleaf
<div class="comments" th:each="comment : ${comments}">
<input th:if="${comment.author} eq ${currentUser}" type="button" value="Отредактировать комментарий"/>
</div>
Или вы можете вместо сравнения объектов сравнить их id и т.д.
А если нужно проверить автора в методе контроллера, то получаем текущего пользователя:
@GetMapping("/edit/{commentId}")
public String editComment(
@PathVariable("commentId") Long commentId,
@AuthenticationPrincipal UserDetails currentUser,
) {
User user = (User) userServiceImpl.findUserByEmail(currentUser.getUsername());
/*
Далее находим комментарий по его id. находим его автора и сравниваем с user.
*/
}