여하튼, 사용하는 방법은 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 설정
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>
요즘 스프링 시큐리티에 좀더 깊이있는 정보가 필요하다. 레퍼런스 또한 부족하기 그지 없으니.. 어디 좋은 책이라도 없으려나ㅡㅜ