サーブレットを使用してSpringBeanにアクセスできます
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
サーブレットのinit
メソッドで。
サーブレットフィルタに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());
springのドキュメントに記載されているようにDelegatingFilterProxyを使用できます: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html#delegating-filter -プロキシ
Web.xmlで宣言されたfilter-nameと同じBean名で実際のFilterBeanを宣言する必要があります。
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>
applicationContext.xml:
<bean id="SpringTestFilter" class="com.company.app.servlet.SpringTestFilter" />
それを取得する方法はいくつかあります
WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(getFilterCongig().getServletContext());
WebApplicationContext springContext = RequestContextUtils.getWebApplicationContext(servletRequest)
その後
springContext.getBean("myBeanId");
ContextEsposingHttpServletRequest
ラッパーを使用して、すべてのBeanをリクエスト属性として配置できます。