我已经从当前用户的数据库加载角色。我可以通过jsp中的spring security表达式访问用户角色,并且可以隐藏未经hasRole授权的选项和url。现在我想把它放在servlet中并显示在日志中(或存储在用户对象会话中)。我们如何实现它?如何从spring安全中获取当前用户角色3.1
回答
你可以尝试这样的事情:
Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder.getContext().getAuthentication().getAuthorities();
你的角色在变当局收集。
更新:的GrantedAuthority的固定错字通用
您是否试过从HttpServletRequest调用getUserPrincipal()?
感谢您的答复,我没有尝试,但我已经实现什么达尼告诉,它为我工作。 – Bhas 2012-04-10 19:36:50
够公平的。快速提示:Dani的方法存在将代码与Spring安全性实现耦合的缺点,而getUserPricipal()是servlet规范中的标准调用,应该与任何提供者协同工作。 – maximdim 2012-04-10 20:37:31
使用getUserPrincipal(),您只能获取请求者的名称。我认为问题是如何获得分配给该用户的角色,所以我猜getUserPrincipal()不会以这种方式工作。 – Jay 2015-07-13 14:07:24
要完成两个答案...
这里是一个getUserPrincipal
安全Spring
实现,所以你可以看到,实际上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
DEF角色= springSecurityService.getAuthentication()getAuthorities()
请尝试提供更广泛和格式化的答案。你可以检查[我如何写出一个好的答案?](https://stackoverflow.com/help/how-to-answer)。 – 2017-08-16 08:11:59
- 1. 如何通过Spring Security获取当前用户的角色
- 2. 获取当前用户的角色
- 3. Moodle - 获取当前用户角色
- 4. 如何在wordpress中获取当前登录用户的角色?
- 5. Spring安全服务与Grails - 获取当前用户'NULL'错误
- 6. 如何根据当前用户角色获取权限
- 7. 如何在jsp中获得spring安全角色层次结构?
- 8. 如何在CRM 2011中使用JavaScript获取安全角色?
- 9. 在MVC中获取当前登录用户的角色6
- 10. 使用Spring @SubscribeMapping获取当前用户
- 11. 如何使用spring安全性访问JSP中的角色?
- 12. 如何在spring security和java注销后获取用户角色?
- 13. MVC 5获取当前用户角色名称
- 14. Zend_Navigation:获取当前用户/角色可访问的页面
- 15. ASP.net MVC - 获取当前记录的用户角色
- 16. 如何获取角色中的所有用户,包括角色中的角色?
- 17. grails - 全局获取当前用户
- 18. 如何根据角色获取用户?
- 19. 如何通过角色获取用户
- 20. 如何在Delphi Win64中获取当前用户的全名
- 21. Spring Roo的2.0.0.RC1安全配置 - 将用户和角色
- 22. 基于Spring安全角色的URL
- 23. 获取否。当前登录的用户在春季安全
- 24. 如何为当前用户设置其他用户角色?
- 25. 如何检查Spring Security进行用户认证并从Flex获取角色?
- 26. Spring MVC安全从REST获取用户数据
- 27. 如何在crm 4.0中检查用户的安全角色?
- 28. 建设Spring&Spring安全3.1与Maven
- 29. Spring安全性为所有角色名称添加前缀“ROLE_”?
- 30. 如何将Spring安全3与jboss领域和用户角色集成?
感谢Dani它为我工作。 – Bhas 2012-04-10 19:35:56
不用理睬;) – Dani 2012-04-10 19:43:14
您应该在此列表中使用grantedauthority接口,因为授权提供者之间的实现可能有所不同 – Laures 2012-04-11 05:26:05