我可以访问我的Servlet的Spring bean。访问的Spring beans和标签
我想知道是否有相当于用于servlet过滤器的WebApplicationContext
? 另外,是否可以访问标签类中的Spring bean?
我可以访问我的Servlet的Spring bean。访问的Spring beans和标签
我想知道是否有相当于用于servlet过滤器的WebApplicationContext
? 另外,是否可以访问标签类中的Spring bean?
对于过滤器 - 使用Filter.init()
:
public void init(FilterConfig config) {
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
}
对于标签 - 使用TagSupport.pageContext
(请注意,这不是提供SimpleTagSupport
):
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
你可以把你所有的豆类如要求使用属性ContextEsposingHttpServletRequest
包装。
你可以使用一个DelegatingFilterProxy为Spring文档中提到:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html#delegating-filter-proxy
我们必须用同一个bean的名称在web.xml中声明的过滤器的名称声明你真正的筛选豆:
网.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>
的applicationContext.xml:
<bean id="SpringTestFilter" class="com.company.app.servlet.SpringTestFilter" />
有没有例子说明如何使用没有web.xml src文件的Java配置来实现这个功能? – Snekse 2014-08-19 21:10:19
有几种方法可以得到它
WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(getFilterCongig().getServletContext());
WebApplicationContext springContext = RequestContextUtils.getWebApplicationContext(servletRequest)
然后
springContext.getBean("myBeanId");
我觉得我要做一个愚蠢的或明显问题(我想现在花时间寻找它),但我会尽力:wi上下文应该始终(在每次运行中)准备好在过滤器的init方法中?无论答案如何,一个可证明的论证是值得赞赏的。谢谢 – reallynice 2014-09-23 09:37:49
@niconic:根据Servlet API规范3.0,第10.12节“Web应用程序部署”,应用程序上下文由ContextLoaderListener初始化,所有servlet上下文侦听器都在“Filter”初始化之前被调用。 – axtavt 2014-09-23 15:01:37
axtavt,完美,正是我所期待的,非常感谢 – reallynice 2014-09-24 17:03:05