Spring Security — это весьма мощный фреймворк, позволяющий описать основные настройки связанные с безопасностью и входом пользователей в приложение. Допустим, что мы уже настроили слой безопасности и при этом описали userService так:
1 2 3 |
<authentication-manager> <authentication-provider user-service-ref="userService"/> </authentication-manager> |
Здесь userService — это бин, реализующий интерфейс org.springframework.security.core.userdetails.UserDetailsService. В нём описан один метод, возвращающий реализацию интерфейса org.springframework.security.core.userdetails.UserDetails. Пусть пользователь уже залогинился. Как узнать его атрибуты: id, имя, ещё что-нибудь? Это делается легко с помощью вот такого кода:
1 2 3 4 |
UserDetailsImpl userDetailsImpl = (UserDetailsImpl) org.springframework.security.core.context.SecurityContextHolder .getContext().getAuthentication().getPrincipal(); String userName = userDetailsImpl.getUsername(); String field... = userDetailsImpl.getField.. |
Где UserDetailsImpl — это наша реализация интерфейса UserDetails, которую возвращает бин userService. Имейте в виду, что код приведённый выше работает только с уже залогиненным пользователем. Если пользователь ещё не вошёл, то он выдаст ошибку.