Задать вопрос
@Danicimo
Java junior

URL на личный кабинет пользователя?

Стек:
Spring boot + srping security + thymeleaf + postgresql
Есть отдельный фрагмент html шапки, надо добавить кнопку с ссылкой на личный профиль пользователя с ссылкой по типу /profile/{id}(id=${user.id})
Есть контроллер который обрабатывает этот адрес /profile/{id}(id=${user.id}) , но не могу понять как мне передать в шапку id текущего пользователя
Слышал что то про SecurityContextHolder.getContext() работает с пользователем под которым зашли, не вижу метода что бы вытащить id
Spring изучаю сам, и не так давно, помогите пожалуйста

Структура проекта
61970a56da582122099959.png
html:
61970a6fc4880274066135.png
  • Вопрос задан
  • 708 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Erik_Mironov
@Erik_Mironov
Старые вопросы: *Dies from cringe*
Spring Security предоставляет класс SecurityContextHolder, который позволяет выполнять поиск текущего аутентифицированного пользователя через:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();

Authentication предоставляет следующие методы:

- Получить имя пользователя вошедшего в систему: getPrincipal()
- Получить пароль аутентифицированного пользователя: getCredentials()
- Получить назначенные роли аутентифицированного пользователя: getAuthorities()
- Получить дополнительную информацию об аутентифицированном пользователе: getDetails()

Вы можете добавить к Model текущему авторизованному пользователю в вашем контроллере:

public String foo(Model model) {
    User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    String username = user.getUsername();
    model.addAttribute("username", username);
    return "your_view";
}

а затем в вашем html:
<td th:each="user : ${user}">
    <a th:if="${username == user.username}" th:href="@{/profile/{id}(id=${user.id}}">Profile</a>
</td>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы