spring-web下delegatingFilterProxy代理類研究筆記

這幾天在看一些shrio的源碼,順便做一下筆記
1web.xml配置

<!-- 集成權限                      start -->
	<filter>
		<filter-name>shiroFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
		<init-param>
			<param-name>targetFilterLifecycle</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>shiroFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher> 
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>

這是集成shrio的基礎配置,這裏可以配置其他的一些security框架沒什麼可說的,下面開始說DelegatingFilterProxy這個代理類

2 先看一下DelegatingFilterProxy這個類的繼承關係
在這裏插入圖片描述
繼承自GenericFilterBean抽象類,這個抽象類又實現了filter接口
在這裏插入圖片描述
看到這裏大概知道DelegatingFilterProxy是個什麼東東了吧
3 由於DelegatingFilterProxy實現了filter接口所以會有init(),doChain(),destroy()這3個方法。
先看初始化init()方法…找了半天沒在DelegatingFilterProxy中找到這個方法,到父類一看原來在GenericFilterBean抽象類中實現了
在這裏插入圖片描述
init()方法中所做的工作就是將Filter包裝成spring的bean的形式,重要的是下面的this.initFilterBean();
this.initFilterBean()是在DelegatingFilterProxy代理類中實現的
在這裏插入圖片描述
這裏首先從web.xml文件中讀取出來shiroFilter的值,this.getFilterName()方法的實現以及
this.findWebApplicationContext()方法的實現,還有this.initDelegate(wac)方法的實現我分別貼出來
getFilterName:獲取filter的名稱即shiroFilter
在這裏插入圖片描述
findWebApplicationContext:獲取spring上下文對象
在這裏插入圖片描述
initDelegate:從spring上下文中獲取被代理的filter對象,即在spring-shrio.xml中配置id爲shrioFilter的bean
在這裏插入圖片描述初始化完成
dofilter()方法
在這裏插入圖片描述
在這裏插入圖片描述

跟着源碼跑了一圈,總算知道DelegatingFilterProxy代理類在幹啥了.
DelegatingFilterProxy其實做的是代理類該做的事,如果沒有DelegatingFilterProxy類,spring想要集成shrio或者springManage安全框架無疑會變得很麻煩,需要在web.xml配置各種各樣的filter,這很明顯增加了兩者的耦合度。並且無法很好地體現spring的依賴注入原則,這就是代理類的優點。它將javaweb中的filter與spring中的bean整合到一起,通過spring來控制filter的生命週期。這樣無論是整合shrio還是springSecurity都非常的方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章