Доступ к бобам Spring из фильтров и тегов сервлета - PullRequest
25 голосов
/ 10 марта 2010

Я могу получить доступ к бобам Spring в моих сервлетах, используя

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

в методе сервлета init.

Мне было интересно, есть ли эквивалент WebApplicationContext для фильтров сервлетов? Кроме того, возможно ли получить доступ к Spring bean-компонентам в классе тегов?

Ответы [ 4 ]

38 голосов
/ 10 марта 2010

Для фильтров - используйте Filter.init():

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

Для тегов - используйте TagSupport.pageContext (обратите внимание, что оно недоступно в SimpleTagSupport):

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
26 голосов
/ 22 июля 2010

вы можете использовать DelegatingFilterProxy, как указано в документации Spring: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html#delegating-filter-proxy

Вам просто нужно объявить ваш реальный бин Filter с тем же именем бина, что и имя фильтра, объявленное в web.xml:

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" />  
2 голосов
/ 06 декабря 2011

Есть пара способов получить это

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

  2. WebApplicationContext springContext = RequestContextUtils.getWebApplicationContext(servletRequest)

тогда

springContext.getBean("myBeanId");
0 голосов
/ 10 марта 2010

Вы можете поместить все ваши bean-компоненты в качестве атрибутов запроса, используя оболочку ContextEsposingHttpServletRequest.

...