Зачастую при реализации какой-то функциональности в приложении требуется доступ к информации о текущем аутентифицированном пользователе. Spring Security предоставляет несколько способов получения информации о пользователе, предлагаю их рассмотреть в этой статье.
Универсальный способ
Универсальный для всех веб-приложений на основе Servlet API способ заключается в использовании метода HttpServletRequest.getUserPrincipal()
. Данный метод возвращает экземпляр Principal
, но в случае со Spring Security всегда будет возвращаться Authentication
. Чтобы получить информацию о пользователе из Authentication
достаточно вызвать метод getPrincipal()
и привести результат к нужному типу.
В приложении на основе Spring Framework это всё будет выглядеть следующим образом:
Аналогичным способом можно получить доступ к информации о пользователе в функциональных обработчиках запросов:
Использование контекста безопасности
Ничто не мешает вам в нужном классе обратиться к контексту безопасности. Сделать это можно как через стратегию, так и через класс SecurityContextHolder
.
Использование стратегии:
Использование SecurityContextHolder
:
Интеграция со Spring Framework
В Spring Framework ожидаемо есть интеграция со Spring Security, благодаря чем информацию о пользователе можно получать в качестве аргументов методов аннотированных контроллеров.
Так любой метод аннотированного контроллера может получать в качестве одного из аргументов объект Principal
:
Но, поскольку при использовании Spring Security это всегда будет Authentication
, можно получать аргумент этого типа:
Кроме этого Spring Framework позволяет получать в качестве одного из аргументов метода сразу информацию о пользователе, но этот аргумент должен быть отмечен аннотацией @AuthenticationPrincipal
. В этом случае Spring Framework сам получит объект с информацией о пользователе из Authentication
и попытается привести его к типу аргумента:
Понравилась статья? Тогда поддержки проект и подкинь монетку:
Больше полезных статей и роликов: