Filter 안에서 스프링을 사용하기 위해선 스프링에서 제공하는 DelegatingFilterProxy 를 이용한다. 스프링 필터 체인방식은 예전에 Acegi 에서 사용된 시큐리티 필터 체인으로부터 가져온것으로 현재는 Spring-Securtity 프로젝트로 통합되었다.

여하튼, 사용하는 방법은 javax.servlet.Filter 인터페이스를 상속받은
DelegatingFilterProxy 필터 체인 클래스를 사용하면 된다.

1.
GenericFilterBean 클래스 상속받은 Filter 클래스 작성


package com.vine.edms.web;

 

import java.io.IOException;

 

import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

import org.springframework.web.filter.GenericFilterBean;

 

import com.vine.edms.webapp.envirement.WebAppEnvirementService;

import com.vine.util.CommonWebFilter;

 

public class VineWebFilter extends GenericFilterBean {

       private WebAppEnvirementService envirement; // Spring beans

       public void setWebAppEnvirementService(WebAppEnvirementService envirement) {

             this.envirement = envirement;

       }

 

       public void doFilter(ServletRequest request, ServletResponse response,   FilterChain chain) throws IOException, ServletException {

             CommonWebFilter.addCommonAttributes(request);

             request.setAttribute("_VW_SKIN", envirement.getSkin());

             request.setAttribute("_VW_TITLE", envirement.getAppTitle());

             chain.doFilter (request, response);

       }

}


2. Spring bean 설정

<bean id="edmsWebAppCommonFilter" class="com.vine.edms.web.VineWebFilter" p:webAppEnvirementService-ref="edmsWebAppEnvirementService" />



3. web.xml 등록

가장 중요한 web.xml 설정 부분이다. init-param 속성을 이용하여 별도의 bean 을 설정하지도 않지만, 기본적으로 filter-name 과 동일한 bean 을 사용하여 필터를 매핑한다.

여기선 edmsWebAppCommonFilter 명을 가진 빈을 만들었고, web.xml 에서 또한 필터 이름을 edmsWebAppCommonFilter 로 정의하였다.


그리고 필터 체인은 2개 이상을 사용해도 무방하다. 아래 샘플은 스프링 시큐티리 체인 필터 또한 같이 사용하는 것을 알 수 있다.

    

<filter>

<filter-name>springSecurityFilterChain</filter-name>

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

</filter>

      

<filter>

<filter-name>edmsWebAppCommonFilter</filter-name>

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

</filter>

 

  

<filter-mapping>

<filter-name>edmsWebAppCommonFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>



요즘 스프링 시큐리티에 좀더 깊이있는 정보가 필요하다. 레퍼런스 또한 부족하기 그지 없으니.. 어디 좋은 책이라도 없으려나ㅡㅜ

+ Recent posts