Framework/spring

spring3 filter 설정 방법

jeeyong 2011. 5. 30. 18:04
web.xml 셋팅
...
  

spring3

org.springframework.web.servlet.DispatcherServlet
 

     contextConfigLocation
     classpath:spring3*.xml
   
1 



spring3
*.htm





testFilter

org.springframework.web.filter.DelegatingFilterProxy



testFilter
/*


...

위 방식대로 하면  filter객체가 spring Context 에 등록된 객체를 사용하지 못한다.

그렇기 때문에 root ContextConfigLocation에 으로 등록할 필요가 있는데 아래 설정을 보면 DispatcherServlet에서 context 설정 부분을 주석처리하고 셋팅 파일들(spring3*.xml)을 모두 /WEB-INF/ 폴더 밑으로 빼야한다. (이 부분은 왜이런지 모르겠는데.. 원래 /src/ 폴더에서 불러오려고 했으나 어떻게 설정해야할지 모르겠어요. 할수있는 방법을 아시는 분은 제발 알려주세요.)

web.xml
 ...
 
contextConfigLocation

/WEB-INF/spring3*.xml



ContextLoader
org.springframework.web.context.ContextLoaderListener




spring3

org.springframework.web.servlet.DispatcherServlet

1 



spring3
*.htm

 



testFilter

org.springframework.web.filter.DelegatingFilterProxy



testFilter
/*


...

이렇게 xml설정을 한후에 서블릿을 담당하는 셋팅 (예: spring3-servlet.xml) 파일안에 filter빈 설정을 해야하는데 xml 설정 방식으로 

spring3-servlet.xml
...

...

이렇게 하나만 빈을 올려놓는 방법도 있지만 spring3를 사용하므로 다른객체들과  마찬가지로 어노테이션을 이용해서 구현하자면 

spring3-servlet.xml
...

 



...

 위 처럼 controller, dao, service와 같이 filter를 설정한 후에 @Component를 설정해 줘야 spring이 알아서 객체에 올려놔 사용하게 된다.

@Component("testFilter")
public class TestFilter implements javax.servlet.Filter{
@Autowired TestService testService;
public void init(FilterConfig arg0) throws ServletException {
}

@Transactional
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
testService.do();
//
chain.doFilter(req, res);
}
public void destroy() {
}
}