위의 필터들을 등록하는 방법은 크게 두 가지로 web.xml에 FilterToBeanProxy 를 사용하여 등록하는 방법과 Application Context에 FiterChainProxy를 사용하는 방법이 있습니다.

web.xml에 모든 필터를 등록할 때는 다음의 순서를 꼭 지켜야 합니다.

  1. ChannelProcessingFilter, 다른 프로토콜로 redirect할 필요가 있을 수도 있기 때문에...
  2. ConcurrentSessionFilter, 주체에 의한 요청을 반영하여 SessionRegistry를 갱신해야 할 필요에 의해서..
  3. HttpSessionContextIntegrationFilter,
    웹 요청이 시작될 때 SecurityContextHolder에 SecurityContext가 설정될 수 있고, 요청이 끝날
    때SecurityContext에 변경이 생기면 HttpSession에 복사할 수 있도록...
  4. Authentication
    processing mechanisms - AuthenticationProcessingFilter,
    CasProcessingFilter, BasicProcessingFilter,
    HttpRequestIntegrationFilter, JbossIntegrationFilter etc -
    SecurityContextHolder가 유효한 Authentication 요청 토큰을 갖도록 수정할 수 있도록...
  5. The
    SecurityContextHolderAwareRequestFilter, if you are using it to install
    an Acegi Security aware HttpServletRequestWrapper into your servlet
    container
  6. RememberMeProcessingFilter, 이전 인증 절치 매커니즘에 의해
    SecurityContextHolder가 변경되지 않았고, 쿠키등을 사용하여 'remember-me' 서비스를 사용할 수
    있다면, 기억해 둔 Authentication 객체를 채워넣는다.
  7. AnonymousProcessingFilter, 이전 인증 절치 매커니즘에 의해 SecurityContextHolder가 변경되지 않았다면, 익명 Authentication 객체를 채워 넣는다.
  8. ExceptionTranslationFilter, Acegi Security 예외를 잡아서 HTTP 에러 응답을 반환하거나 적당한 AuthenticationEntryPoint가 실행되도록 한다.
  9. FilterSecurityInterceptor, 웹 URI를 보호하기 위해..

그럼 web.xml이 너무 복잡해지고 커지기 때문에...권장하고 있는 방법은 Application Context에 FilterChainProxy를 사용하여 모든 필터를 등록하는 방법입니다. 근데 FiterChainProxy를 사용하려면 어차피 web.xml에서 FilterToBeanProxy로 FilterChainProxy를 등록해야 하기 때문에..(어지러우시죠??ㅋㅋ)...네 그렇답니다.ㅋ

즉..web.xml에는 다음과 같이 FiterToBeanProxy를 등록하고(FilterChainProxy를 사용하도록 등록)

    <filter>
        <filter-name>Acegi Filter Chain Proxy</filter-name>
        <filter-class>
            org.acegisecurity.util.FilterToBeanProxy
        </filter-class>
        <init-param>
            <param-name>targetBean</param-name>
            <param-value>filterChainProxy</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>Acegi Filter Chain Proxy</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Application Context에 FilterChainProxy를 등록합니다.

    <!--  if you wish to use channel security, add "channelProcessingFilter," in front
        of "httpSessionContextIntegrationFilter" in the list below -->
    <bean id="filterChainProxy"
        class="org.acegisecurity.util.FilterChainProxy">
        <property name="filterInvocationDefinitionSource">
            <value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT
                /**=httpSessionContextIntegrationFilter,formAuthenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
            </value>
        </property>
    </bean>

여기서 참조하는 필터들은 모두 Application Context에 bean으로 등록되어 있고 그 bean의 이름으로 FilterChainProxy에서 참조하고 있습니다.