Получение информации о пользователе — Spring Security в деталях

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

Понравилась статья? Тогда поддержки проект и подкинь монетку:

Больше полезных статей и роликов: