Apache Shiro V1.2 SecurityUtils與SecurityManager的關係以及Subject的建立
阿新 • • 發佈:2019-01-03
SecurityUtils是一個抽象的工具類,提供了 SecurityManager 例項的儲存和獲取的方法,以及建立Subject的方法。
一、SecurityUtils中的方法
SecurityUtils提供了 getSecurityManager()和setSecurityManager外,還有個特別的方法 getSubject(),這是獲取subject的最有效的途徑。
下面是 SecurityUtils 提供的三個方法:
實際上,建立的subject的工作還是由 SecurityManager 來完成的。 Buidler是在 Subject的內類,在Buidler中通過SecurityUtils 獲取到了 SecurityManager ,呼叫buildSubject()。 在buildSubject()中呼叫了 securityManager.createSubject()方法(由SecurityManager 的子類DefaultSecurityManager 的 實現createSubject()),完成subject建立的。 二、最終subject建立的程式碼 DefaultSecurityManager 例項化的時候,生成了 SubjectFactory子類DefaultSubjectFactory 例項的屬性。 DefaultSecurityManager的createSubject()方法 呼叫 DefaultSubjectFactory 的 createSubject()方法最終完成了subject 的建立: 下面是 DefaultSubjectFactory 中createSubject()方法的程式碼: 可見,subject的最終例項是 DelegatingSubject的例項,並且包含host,authenticated,principals,securityManager等豐富的資訊。
實際上,建立的subject的工作還是由 SecurityManager 來完成的。 Buidler是在 Subject的內類,在Buidler中通過SecurityUtils 獲取到了 SecurityManager ,呼叫buildSubject()。 在buildSubject()中呼叫了 securityManager.createSubject()方法(由SecurityManager 的子類DefaultSecurityManager 的 實現createSubject()),完成subject建立的。 二、最終subject建立的程式碼 DefaultSecurityManager 例項化的時候,生成了 SubjectFactory子類DefaultSubjectFactory 例項的屬性。 DefaultSecurityManager的createSubject()方法 呼叫 DefaultSubjectFactory 的 createSubject()方法最終完成了subject 的建立: 下面是 DefaultSubjectFactory 中createSubject()方法的程式碼: 可見,subject的最終例項是 DelegatingSubject的例項,並且包含host,authenticated,principals,securityManager等豐富的資訊。