Spring Web Delegating FilterProxyとSpring Security Web Filter Chin

4821 ワード

概要
Spring Security XML構成を使用した肯定属性の下のコード:
<filter>  
  <filter-name>springSecurityFilterChainfilter-name>  
  <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>   
 filter>  

<filter-mapping>  
  <filter-name>springSecurityFilterChainfilter-name>  
  /*  
filter-mapping>  
似たようなShroは配置時にも同じコードがあります.
<filter>  
    <filter-name>shiroFilterfilter-name>  
    <filter-class>  
        org.springframework.web.filter.DelegatingFilterProxy  
    filter-class>  
filter>  
<filter-mapping>  
    <filter-name>shiroFilterfilter-name>  
    /*  
filter-mapping>  
Spring Web Filter
Spring Webは、一般的なServlet Filterのシーンを簡単に強化し、パッケージ化する.GenericFilterBeanとCompite FilterはSpring Web Filterの二つのトップクラスの実現です.GenercalifilterBeanはServlet FilterのFilterインターフェースだけでなく、Spring IOCの多くのインターフェースを実現しました.
public abstract class GenericFilterBean implements Filter, BeanNameAware, EnvironmentAware,
        EnvironmentCapable, ServletContextAware, InitializingBean, DisposableBean 
これによりSpring容器の情報の注入とライフサイクルの管理された機能を実現しました.CompsiteFilterは複数のFilterを組み合わせるためのツール類です.GenericFilterBenはワンセグPerRequest Filterというサブクラスがあります.名前を見れば分かります.Request要求を実現して、一回だけ呼び出す機能があります.実際、Spring Web Filterパッケージの下のほとんどの具体的な実装はOnecePerRequest Filterから拡張されている.例えば、CharcterEncodingFilter、Request Logggggilter、CorsFilter、ForwardedHeader Filter、ハイドロテンダー、HttenHttp MethodFilter、HttpppppputFormContentFilter、Request ConttextFilter、ShallowEtagHeaderFilter.DelegatingFilterProxyはGeneraicFilterBeanから継承されています.これもツールです.彼はSpring管理のFilterの対象となる代理とすることができます.最初のSpring SecurityとShroの配置はこのクラスを使いました.
Spring SecurityとDelegating FilterProxy
Spring Security Webのcontextパッケージの下にSpring WebApple Initializerインターフェースの実現Abstract Security WebApplizerがあります.そのオンストップ方法では、以下のプライベートメソッドを呼び出します.
public static final String DEFAULT_FILTER_NAME = "springSecurityFilterChain";

    /**
     * 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);
    }
springSecurityFilterChinというbeanをDelegating FilterProxyで包装した後、Servlet容器に動的に登録します.上のxmlと同じ機能です.
SecurityFilterCharinはSpring Security Filter呼び出しチェーンです.呼び出しチェーンはSpring MVCのように、あるControllerにルーティングするように、非常に繊細で豊かな構成を提供することができます.
ヒロの使い方はそっくりです.興味のある方は、ヒロの実現について見てください.
参考:Spring-webソース解析のFilter-OcePerRequest Filter