Зачастую при реализации какой-то функциональности в приложении требуется доступ к информации о текущем аутентифицированном пользователе. 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 и попытается привести его к типу аргумента:
Понравилась статья? Тогда поддержки проект и подкинь монетку:
Больше полезных статей и роликов:
