DelegatingFilterProxy详解
2018-01-10 00:00
288 查看
全文内容转载至spring DelegatingFilterProxy,targetFilterLifecycle的作用 ,我重新整理一下文章的结构
今天在看SHIRO的时候,看到佟刚老师用了DelegatingFilterProxy类,并使用了targetFilterLifecycle和targetBeanName属性,到网上找到了GOODDEEP先生的文章,受用很大。
概要:
DelegatingFilterProxy类不是针对SHIRO出现的,是SHIRO的org.apache.shiro.spring.web.ShiroFilterFactoryBean 使用到了SPRING这个类提供功能。这个类使SPRING容器中的BEAN可以在WEB.XML中配置为FILTER,并生效。这样一来及起到了过滤URL请求作用,又可以访问SPRING容器中其他的BEAN提供的丰富功能。
详情:
使用两种配置比较说明DelegatingFilterProxy配置的区别:
配置一:
在web.xml中增加如下内容:
由filter和filter-mapping构成。filter指定过滤器处理类(实现了Filter接口),filter-mapping指定过滤的规则
配置二:
在web.xml中增加如下内容:
在spring bean配置中加入:
DelegatingFilterProxy类是一个代理类,所有的请求都会首先发到这个filter代理,然后再按照"filter-name"委派到spring中的这个bean
delegate为org.apache.shiro.spring.web.ShiroFilterFactoryBean
配置二和配置一最大的不同是,配置一是一个filter,优先被加载到container中,无法调用spring中后续的bean;而配置二是一个spring bean,可以引用其他的bean,而请求都通过DelegatingFilterProxy类委派给B,具体实现为:
"targetFilterLifecycle":spring bean实现了Filter接口,但默认情况下,是由spring容器来管理其生命周期的(不是由tomcat这种服务器容器来管理)。如果设置"targetFilterLifecycle"为True,则spring来管理Filter.init()和Filter.destroy();若为false,则这两个方法失效!!
“targetBeanName”:用来指定Spring配置文件中的beanName,就不再要求Spring配置文件中的beanName和web.xml中的filte-name一致了。
另外:Filter和servlet都可以对URL进行处理,Filter是一个链式处理,只要你想继续处理就可以传递下去;而Servlet则是一次处理并返回,适合简单逻辑处理。filter就像"递归",在web.xml配置中的顺序代表了filter的调用流程,而servlet被调用后不会继续调用其他的servlet!因此配置中的顺序不影响!
今天在看SHIRO的时候,看到佟刚老师用了DelegatingFilterProxy类,并使用了targetFilterLifecycle和targetBeanName属性,到网上找到了GOODDEEP先生的文章,受用很大。
概要:
DelegatingFilterProxy类不是针对SHIRO出现的,是SHIRO的org.apache.shiro.spring.web.ShiroFilterFactoryBean 使用到了SPRING这个类提供功能。这个类使SPRING容器中的BEAN可以在WEB.XML中配置为FILTER,并生效。这样一来及起到了过滤URL请求作用,又可以访问SPRING容器中其他的BEAN提供的丰富功能。
详情:
使用两种配置比较说明DelegatingFilterProxy配置的区别:
配置一:
在web.xml中增加如下内容:
<filter> <filter-name>permissionFilter</filter-name> <filter-class>com.taobao.riskm.filter.PermissionFilter</filter-class> </filter> <filter-mapping> <filter-name>permissionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
由filter和filter-mapping构成。filter指定过滤器处理类(实现了Filter接口),filter-mapping指定过滤的规则
配置二:
在web.xml中增加如下内容:
<filter> <filter-name>permission</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>permission</filter-name> <url-pattern>*.htm</url-pattern> </filter-mapping>
在spring bean配置中加入:
<bean id="permission" class="com.taobao.kfc.kwb.web.permission.PermissionHttpServlet"></bean>
DelegatingFilterProxy类是一个代理类,所有的请求都会首先发到这个filter代理,然后再按照"filter-name"委派到spring中的这个bean
protected void invokeDelegate( Filter delegate, ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException { delegate.doFilter(request, response, filterChain); }
delegate为org.apache.shiro.spring.web.ShiroFilterFactoryBean
配置二和配置一最大的不同是,配置一是一个filter,优先被加载到container中,无法调用spring中后续的bean;而配置二是一个spring bean,可以引用其他的bean,而请求都通过DelegatingFilterProxy类委派给B,具体实现为:
"targetFilterLifecycle":spring bean实现了Filter接口,但默认情况下,是由spring容器来管理其生命周期的(不是由tomcat这种服务器容器来管理)。如果设置"targetFilterLifecycle"为True,则spring来管理Filter.init()和Filter.destroy();若为false,则这两个方法失效!!
“targetBeanName”:用来指定Spring配置文件中的beanName,就不再要求Spring配置文件中的beanName和web.xml中的filte-name一致了。
<filter> <filter-name>permission</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetBeanName</param-name> <param-value>Spring-bean-name</param-value> </init-param> </filter>
另外:Filter和servlet都可以对URL进行处理,Filter是一个链式处理,只要你想继续处理就可以传递下去;而Servlet则是一次处理并返回,适合简单逻辑处理。filter就像"递归",在web.xml配置中的顺序代表了filter的调用流程,而servlet被调用后不会继续调用其他的servlet!因此配置中的顺序不影响!
相关文章推荐
- DelegatingFilterProxy详解
- DelegatingFilterProxy管理过滤器详解
- 先码后看 Filter的体系结构与DelegatingFilterProxy 侵立删
- spring DelegatingFilterProxy管理过滤器
- spring security之DelegatingFilterProxy和FilterChainProxy
- DelegatingFilterProxy干了什么?
- class DelegatingFilterProxy
- spring DelegatingFilterProxy 过滤器 的原理及运用
- Spring MVC过滤器-委派过滤器代理(DelegatingFilterProxy)
- org.springframework.web.filter.DelegatingFilterProxy的理解
- spring security源码分析_DelegatingFilterProxy
- DelegatingFilterProxy【转】
- DelegatingFilterProxy作用浅析
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-001-SpringSecurity简介(DelegatingFilterProxy、AbstractSecurityWebApplicationInitializer、WebSecurityConfigurerAdapter、@EnableWebSecurity、@EnableWebMvcS)
- 1.配置DelegatingFilterProxy
- Spring Web DelegatingFilterProxy和Spring Security Web Filter Chain
- Spring管理filter和servlet ( FilterToBeanProxy/DelegatingFilterProxy)
- DelegatingFilterProxy(转)
- spring DelegatingFilterProxy 过滤器 的原理及运用
- Spring之过滤器代理DelegatingFilterProxy