我可以訪問我的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