web-dev-qa-db-ja.com

サーブレットのフィルターとタグからSpringBeanにアクセスする

サーブレットを使用してSpringBeanにアクセスできます

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 

サーブレットのinitメソッドで。

サーブレットフィルタにWebApplicationContextに相当するものがあるのだろうか?また、タグクラスでSpring Beanにアクセスすることは可能ですか?

25
Damien

フィルタの場合-Filter.init()を使用します。

public void init(FilterConfig config) {
    WebApplicationContext springContext = 
        WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
}

タグの場合-TagSupport.pageContextを使用します(SimpleTagSupportでは使用できないことに注意してください):

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
39
axtavt

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" />  
26
Alexis K

それを取得する方法はいくつかあります

  1. WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(getFilterCongig().getServletContext());

  2. WebApplicationContext springContext = RequestContextUtils.getWebApplicationContext(servletRequest)

その後

springContext.getBean("myBeanId");
2
Barry Knapp

ContextEsposingHttpServletRequest ラッパーを使用して、すべてのBeanをリクエスト属性として配置できます。

0
Bozho