我明白什麼@Secured DOES,但不知道它是如何做到的。@Secured如何知道用戶來自數據庫的角色?
有人可以解釋@Secured如何抓住角色?它是從authorities-by-username-query
得到嗎?只要它在數據庫中,我可以將任何字符串放入參數中嗎?
我明白什麼@Secured DOES,但不知道它是如何做到的。@Secured如何知道用戶來自數據庫的角色?
有人可以解釋@Secured如何抓住角色?它是從authorities-by-username-query
得到嗎?只要它在數據庫中,我可以將任何字符串放入參數中嗎?
用戶的角色存儲在SecurityContext
中,或者更具體地說,存儲在SecurityContext
中的Authentication
對象中。在進行身份驗證時,身份驗證信息將被加載並存儲在安全上下文中。角色可以源自數據庫,具體取決於您的配置。在你的情況下,他們使用authorities-by-username-query
查詢加載。
當安全攔截器處理授權(例如使用@Secured
註釋的方法級別授權)時,它會根據存儲在上下文中的認證來確定用戶是否應該能夠訪問它。
爲了更好地理解引擎蓋下會發生什麼,你應該看看春季安全過濾器鏈和參考指南的Architecture section。
SpringSecurity通過使用@Secured提供了令人敬畏的AOP方法來保護 Java應用程序中的方法。 Spring邏輯或操作@Secured註釋中列出的角色 。從
SecurityContextHolder.getContext().getAuthentication().getAuthorities()
AbstractSecurityInterceptor獲得GrantedAuthorities的收集是實現了安全的對象 安全攔截抽象類。
從SecurityContextHolder中獲取Authentication對象。
對於被固定的調用(有的 ConfigAttributes對安全對象調用的列表):
看那source code了更多的瞭解。
AccessDecisionManager是作爲AffirmativeBased,ConsensusBased或UnanimousBased實現的接口編排的選民,並要求各反過來是否請求用戶應通過@Secured註解出租或拒絕。
我覺得有點複雜。謝謝! – bmarkham
它從['SecurityContext']獲取角色(http://docs.spring.io/autorepo/docs/spring-security/3.2.0.RELEASE/apidocs/org/springframework/security/core /context/SecurityContext.html)。用戶的角色在認證過程中存儲在安全上下文中,例如使用您提到的「用戶名 - 查詢」權限查詢(取決於您的確切配置)。 –
Ahhhh我明白了,非常感謝。如果您願意並且我會接受,您可以將其作爲答案張貼 – bmarkham