Я загрузил роли из базы данных для текущего пользователя. И я могу получить доступ к роли пользователя с выражением Spring Security в jsp и может скрывать параметры и URL-адреса, которые не разрешены с помощью hasRole. Теперь я хотел иметь его в сервлете и отображать его в журналах (или хранить в сеансе пользовательских объектов). Как мы можем добиться этого?Как получить текущие роли пользователя из весенней безопасности 3.1
ответ
Вы можете попробовать что-то вроде этого:
Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder.getContext().getAuthentication().getAuthorities();
У вас есть коллекция ролей в переменной власти.
Update: Исправлена опечатка GrantedAuthority родовое
Вы пытались позвонить getUserPrincipal() из HttpServletRequest?
Спасибо за ответ, я не пробовал, но я реализовал то, что Дани сказал, это сработало для меня. – Bhas
Достаточно честный. Замечание: подход Дани имеет недостаток в сочетании кода с реализацией безопасности Spring, в то время как getUserPricipal() является стандартным вызовом в спецификации сервлета и должен работать с любым провайдером. – maximdim
С помощью getUserPrincipal() вы получаете только имя запрашивающего. Я думаю, вопрос заключается в том, как получить роли, назначенные этому пользователю, поэтому я думаю, что в getUserPrincipal() тоже не будет работать так. – Jay
Чтобы завершить оба ответа ...
Вот реализация по Spring
безопасности getUserPrincipal
, так что вы можете увидеть, что на самом деле getUserPrincipal
нас SecurityContextHolder
public Principal getUserPrincipal() {
Authentication auth = getAuthentication();
if ((auth == null) || (auth.getPrincipal() == null)) {
return null;
}
return auth;
}
//And the getAuthentication
private Authentication getAuthentication() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!trustResolver.isAnonymous(auth)) {
return auth;
}
return null;
}
Если вы разрабатываете Java 8, становится все легче.
Чтобы получить все роли пользователя:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Set<String> roles = authentication.getAuthorities().stream()
.map(r -> r.getAuthority()).collect(Collectors.toSet());
, чтобы проверить, если пользователь имеет определенную роль, например, ROLE_USER:.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
boolean hasUserRole = authentication.getAuthorities().stream()
.anyMatch(r -> r.getAuthority().equals("ROLE_USER"));
Защиты springSecurityService
Защита роли = springSecurityService.getAuthentication() getAuthorities()
Пожалуйста, постарайтесь предоставить более обширный и отформатированный ответ. Вы можете проверить [Как написать хороший ответ?] (Https://stackoverflow.com/help/how-to-answer). –
- 1. Как фильтровать пользователя по весенней роли безопасности в домене
- 2. Нужно ли настраивать роли в весенней безопасности
- 3. Роли и разрешения для весенней безопасности
- 4. Получить роли безопасности из Weblogic для безопасности Spring
- 5. Как узнать все роли, которые пользователь имеет в весенней безопасности
- 6. Как сделать перенаправление весенней безопасности
- 7. Как получить поле от весенней безопасности?
- 8. Весенняя безопасность не работает при обновлении весенней безопасности 3,0 до весенней безопасности 3.1
- 9. получить AuthenticationManager в весенней безопасности
- 10. Как получить текущий зарегистрированный пользовательский объект из весенней безопасности?
- 11. Как получить доступ к роли в JSP с использованием весенней безопасности?
- 12. Получить запрашиваемый у пользователя адрес в весенней безопасности
- 13. Настройка пользовательских полномочий и роли в весенней безопасности
- 14. Основы весенней безопасности
- 15. весна 3.1 с зимним спящим 4 с весенней защитой 3.1: Как обеспечить, чтобы транзакции проводились до весенней безопасности.
- 16. Как удалить фильтр из весенней безопасности?
- 17. показатели весенней загрузки, весенней безопасности и dropwizard
- 18. Применение весенней безопасности - это правильное использование?
- 19. Как показать другую страницу для пользователя в весенней безопасности
- 20. Active Directory Использование весенней безопасности
- 21. Способы аутентификации весенней безопасности
- 22. роли весной вопросы безопасности
- 23. как аутентифицировать пользователя в весенней безопасности с помощью шифрования паролей
- 24. Обновление весенней безопасности OAuth2
- 25. Использование весенней безопасности
- 26. Выпуск весенней безопасности SAML
- 27. Вход Выход из использования в весенней безопасности
- 28. Роли безопасности Cloudkit
- 29. Как получить идентификационную информацию при использовании весенней безопасности?
- 30. Вспомогательная функция для весенней безопасности
Спасибо, Дани, это сработало для меня. – Bhas
приветствуется;) – Dani
вы должны использовать интерфейс givenauthority в этом списке, так как реализация может отличаться между поставщиками авторизации – Laures