我已經從當前用戶的數據庫加載角色。我可以通過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. Spring Roo獲取當前登錄用戶的角色
- 5. Symfony:如何獲取FormType或security.authorization_checker中的當前用戶角色
- 6. 如何在wordpress中獲取當前登錄用戶的角色?
- 7. Spring安全服務與Grails - 獲取當前用戶'NULL'錯誤
- 8. 獲取當前用戶角色下的所有角色
- 9. 如何獲取當前用戶的所有角色?
- 10. 如何根據當前用戶角色獲取權限
- 11. Spring安全角色分配
- 12. 如何在jsp中獲得spring安全角色層次結構?
- 13. 如何獲得與cas集成的spring安全中的當前用戶?
- 14. 如何在CRM 2011中使用JavaScript獲取安全角色?
- 15. 在MVC中獲取當前登錄用戶的角色6
- 16. 使用Spring @SubscribeMapping獲取當前用戶
- 17. 如何在Spring安全性中用標籤標識角色?
- 18. 如何使用spring安全性訪問JSP中的角色?
- 19. 如何在Drupal 7中獲取當前登錄用戶的角色?
- 20. 如何在spring security和java註銷後獲取用戶角色?
- 21. Grails Spring Security獲取當前頁面的角色
- 22. 如何獲取角色中的所有用戶,包括角色中的角色?
- 23. 如何在駱駝處理器中獲取用戶角色? (Spring安全+ REST服務+駱駝)
- 24. ASP.net MVC - 獲取當前記錄的用戶角色
- 25. MVC 5獲取當前用戶角色名稱
- 26. Zend_Navigation:獲取當前用戶/角色可訪問的頁面
- 27. 如何通過角色獲取用戶
- 28. 如何根據角色獲取用戶?
- 29. grails - 全局獲取當前用戶
- 30. Spring Roo的2.0.0.RC1安全配置 - 將用戶和角色
感謝Dani它爲我工作。 – Bhas 2012-04-10 19:35:56
不用理睬;) – Dani 2012-04-10 19:43:14
您應該在此列表中使用grantedauthority接口,因爲授權提供者之間的實現可能有所不同 – Laures 2012-04-11 05:26:05