从servlet过滤器和标记访问Spring bean

Dam*_*ien 25 tags spring servlets javabeans servlet-filters

我可以使用我的Servlet访问Spring bean

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 
Run Code Online (Sandbox Code Playgroud)

在Servlet的init方法中.

我想知道是否有相当于WebApplicationContextservlet过滤器?另外,是否可以在标记类中访问Spring bean?

axt*_*avt 39

对于过滤器 - 使用Filter.init():

public void init(FilterConfig config) {
    WebApplicationContext springContext = 
        WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
}
Run Code Online (Sandbox Code Playgroud)

对于标签 - 使用TagSupport.pageContext(请注意,它不可用SimpleTagSupport):

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
Run Code Online (Sandbox Code Playgroud)

  • @niconic:应用程序上下文由`ContextLoaderListener`初始化,所有servlet上下文侦听器在初始化`Filter`s之前调用,根据Servlet API Specification 3.0,第10.12节Web应用程序部署. (4认同)

Ale*_*s K 26

您可以使用Spring文档中提到的DelegatingFilterProxy:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html#delegating-filter-proxy

您只需使用与web.xml中声明的filter-name相同的bean名称声明您的真实Filter bean:

web.xml中:

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

    <filter-mapping>
       <filter-name>SpringTestFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
Run Code Online (Sandbox Code Playgroud)

applicationContext.xml中:

    <bean id="SpringTestFilter" class="com.company.app.servlet.SpringTestFilter" />  
Run Code Online (Sandbox Code Playgroud)

  • 有没有使用不带web.xml src文件的Java config如何完成此操作的示例? (2认同)