0
A
回答
1
從spring-security 3.2 docs(也適用於version 4.0.0):
在成功切換,用戶的SecurityContext將被更新,以反映指定的用戶,也將包含其中包含原始用戶的額外SwitchUserGrantedAuthority。在切換之前,將檢查用戶是否已經被切換,並且將退出任何當前切換以防止「嵌套」切換。
所以,你必須切換用戶,當你調用後:
request.getUserPrincipal().getAuthorities()
檢索登錄的用戶,它將包含當前USER
和以前ADMIN
用戶的當局。前一個用戶的權限將在SwitchUserGrantedAuthority
實例中。
我在我的代碼中做的是驗證當前用戶是否有一些SwitchUserGrantedAuthority
在其權限中,並向該用戶添加屬性,因此客戶端知道我以管理員身份登錄,但已切換用戶。我使用了這個功能,所以我可以顯示一個按鈕,從該用戶註銷並返回到管理員頁面。
1
我解決它在以下方式:
public User getAdminLoggedAsUser() {
try {
return (User) (((SwitchUserGrantedAuthority) (SecurityContextHolder.getContext().getAuthentication().getAuthorities().toArray()[1]))
.getSource().getPrincipal());
} catch (IndexOutOfBoundsException e) {
return null;
}
}
IndexOutOfBoundsException
在沒有管理員登錄的用戶,bacause在這種情況下,不會有數組中SwitchUserGrantedAuthority
被拋出。
相關問題
- 1. 管理magento中的管理員帳戶
- 2. 允許用戶/管理員自己更新內容管理
- 3. AuthLogic管理員用戶和隱藏非管理員的管理鏈接
- 4. Drupal:來自管理員/管理員的用戶評論
- 5. 管理員用戶的MVC用戶管理
- 6. 早期Django管理員註銷
- 7. 用管理員帳戶
- 8. Django管理員用戶
- 9. Laravel:如何區分普通用戶,管理員和管理員
- 10. OSGi:條件許可管理員或用戶管理員
- 11. 管理用戶管理與設計
- 12. 本地管理員組中的SharePoint場管理員帳戶
- 13. 使用ParseRoles管理組中的管理員用戶角色
- 14. 幫我重構我的管理員用戶的意見與非管理員用戶的意見
- 15. Firebase管理員和用戶帳戶
- 16. 解鎖租戶管理員
- 17. Django管理員DoesNotExist在/管理員/
- 18. Sonata管理員 - 子管理員類
- 19. 允許buddypress組管理員添加更多管理員
- 20. Windows環境變量擴展:管理員與非管理員
- 21. 團隊管理員與項目管理員TFS
- 22. 排除在Django管理員的用戶不超級管理員的字段
- 23. 專門的Magento管理員用戶
- 24. 管理員訪問域用戶的Gmail?
- 25. Django的:測試管理員用戶
- 26. 授予與管理員選項角色的權限Vs授予與管理員選項的用戶角色?
- 27. SilverStripe管理員更改
- 28. 驗證與Active管理員
- 29. Drupal管理員與admin_menu
- 30. WordPress的Ajax爲管理員用戶返回正確的數據,但返回非管理員的整個主頁
優秀,我會試試看 – abiieez 2014-11-22 07:06:20