天天看點

shiro登入流程ShiroFilterShiroFilterFactoryBean建立shiroFilterPathMatchingFilterChainResolver和FilterChainManager的建立過程:

Shiro提供了與Web內建的支援,其通過一個ShiroFilter入口來攔截需要安全控制的URL,然後進行相應的控制,ShiroFilter類似于如Strut2/SpringMVC這種web架構的前端

其是安全控制的入口點,其負責讀取配置(如ini配置檔案),然後判斷URL是否需要登入/權限等工作。

web.xml配置名字為shiroFilter的過濾器,這個bean去 shiro.in 或者shiro.xml配置檔案中找

首先是在web.xml中配置DelegatingFilterProxy

配置好DelegatingFilterProxy後,下面隻要再把ShiroFilter配置到Spring容器(此處為Spring的配置檔案)即可:

(使用ShiroFilterFactoryBean建立shiroFilter)

使用了ShiroFilterFactoryBean來建立shiroFilter,這裡用到了Spring中一種特殊的Bean——FactoryBean。當需要得到名為”shiroFilter“的bean時,會調用其getObject()來擷取執行個體。下面我們通過分析ShiroFilterFactoryBean建立執行個體的過程來探究Shiro是如何實作安全攔截的:

其中調用了createInstance()來建立執行個體:

可以看到建立SpringShiroFilter時用到了兩個元件:SecurityManager和ChainResolver。

先有一個大體的了解,那麼對于源碼分析會有不少幫助。下面會對以上兩個重要的元件進行分析,包括PathMatchingFilterChainResolver和FilterChainManager。首先貼一段ShiroFilter的在配置檔案中的定義:

待完成—-