首页 > 编程语言 > 详细

Spring DelegatingFilterProxy解析

时间:2014-09-02 19:51:25      阅读:425      评论:0      收藏:0      [点我收藏+]

以前DelegatingFilterProxy是在需要使用spring security 的时候在xml中配置,如下:

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
 </filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

所以一直以为此类是spring security中的类,后来发现不是这样的,这个类位于spring-web包,和security没有关系。

这个类实际上就是一个Filter的委派代理类。

这样配置的意思是 spring管理的bean中有一个叫名字叫springSecurityFilterChain,然后把其注册进来。

在security的AbstractSecurityWebApplicationInitializer中是这样使用的:

/**
     * Registers the springSecurityFilterChain
     * @param servletContext the {@link ServletContext}
     */
    private void insertSpringSecurityFilterChain(ServletContext servletContext) {
        String filterName = DEFAULT_FILTER_NAME;
        DelegatingFilterProxy springSecurityFilterChain = new DelegatingFilterProxy(filterName);
        String contextAttribute = getWebApplicationContextAttribute();
        if(contextAttribute != null) {
            springSecurityFilterChain.setContextAttribute(contextAttribute);
        }
        registerFilter(servletContext, true, filterName, springSecurityFilterChain);
    }

 

这样就是把filter配置成了一个bean,并且让spring来管理器生命周期。

DelegatingFilterProxy本身也是一个filter,>> GenericFilterBean >> Filter 

其中有一个参数名是targetBeanName ,这就是需要代理的filter名称,如果这个名称为空的话,则会去找名称是:

 

<filter-name>springSecurityFilterChain</filter-name>
的bean.
其中有个属性targetFilterLifecycle标示是否调用代理filter的init方法。
如果为true则调用,否则不调用。

 

Spring DelegatingFilterProxy解析

原文:http://www.cnblogs.com/ranger2016/p/3952044.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!