在Servlet过滤器中使用Spring作为“独立”应用程序

时间:2018-06-27 07:52:14

标签: java spring servlets servlet-filters

我想做的是在Servlet过滤器中使用Spring。因此,基本上,可以利用我的Filter类中的依赖项注入。 作为主要要求,我无法对运行过滤器的环境进行假设,因为它是作为库提供的。当然,它是一个Servlet容器,但是我无法说说web.xml中包含的其他应用程序(其响应和请求将被我的过滤器拦截)。<​​/ p>

因此,我的方法是创建一个新的Servlet,使其像这样在启动时执行:

<servlet>
    <servlet-name>springInitializer</servlet-name>
    <servlet-class>com.aef.configuration.SpringInitializer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

这里有SpringInitializer类,用于为整个Filter项目启用Spring功能

public class SpringInitializer {

    public SpringInitializer() {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
    }
}

,它适用于我的某些服务。 但是关于我的主要过滤器类不是

public class DecryptionRequestFilter implements Filter {

    @Autowired
    @Qualifier("JsonManager")
    private ContentManager contentManager;

    ... 

    }

实际上,我的contentManager永远是null

作为旁注,我说我的ContentManager类用@Service注释,而我的application-context.xml像这样:

<context:component-scan base-package="com.aef" />
<mvc:annotation-driven />

web.xml就是这样

<servlet>
    <servlet-name>springInitializer</servlet-name>
    <servlet-class>com.aef.configuration.SpringInitializer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<filter>
    <filter-name>decryptionRequestFilter</filter-name>
    <filter-class>com.aef.filter.DecryptionRequestFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>decryptionRequestFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

你能给我一些提示吗?

0 个答案:

没有答案