filter에서 spring bean 사용하기

보통 서블릿 필터에서 스프링 빈을 주입 받지 못하는경우

아래와  getBean 메소드를 이용해서 스프링 빈을 가져오는 경우를 볼수 있다.

    private static ApplicationContext ctx;

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        ctx = applicationContext;
    }

    /**
     *  빈 조회
     *
     * @param beanName 스프링빈 이름
     * @return
     */
    public static Object getBean(String beanName) {
        return ctx.getBean(beanName);
    }

 

하지만 스프링에서 필터를 지원하는 클래스가 있다. DelegatingFilterProxy 라는 클래스를 이용하면 쉽게 스프링 빈을 주입받을수 있다.

web.xml

        <filter>
		<filter-name>myCustomFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>myCustomFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

context.xml

<bean id="myCustomFilter" class="net.talkdev.filter.MyCustomFilter" />

filter-name의 이름으로 bean을 찾아서  filter로 등록을 해준다. 

설정만으로 쉽게 스프링 빈을 주입받을수 있다.