Два отдельных контекста Spring для одного веб-приложения

Я хочу использовать два разных веб-контекста Spring, каждый из которых имеет собственный contextConfig, сервлет Spring и фильтр, которые должны быть сопоставлены с разными URL-адресами. У меня есть

  1. стандартный проект Grails, сопоставленный с '/'
  2. и существующее веб-приложение Spring, которое я хочу сопоставить с /extra/

я знаю, что могу развернуть оба в одном Tomcat, но я ищу способ сделать одно приложение (один warи т. д.), потому что это может упростить наш процесс развертывания и разработки.

Этим приложениям не нужно совместно использовать bean-компоненты или что-то еще, они должны быть полностью отдельными. У обоих есть DispatcherServlet и DispatcherFilter (и оба используют Spring Security, но с другой конфигурацией)

Как я могу настроить web.xmlдля такого веб-приложения?

Я попытался добавить новый фильтр:

<filter>
    <filter-name>extraSpringSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>contextAttribute</param-name>
        <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.extraSpring</param-value>
    </init-param>
    <init-param>
        <param-name>targetBeanName</param-name>
        <param-value>extraSecurityFilterBean</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>extraSpringSecurityFilterChain</filter-name>
    <url-pattern>/extra/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

и сервлет диспетчера Spring:

<servlet>
    <servlet-name>extraSpring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
        <param-name>springConfigLocation</param-name>
        <param-value>classpath:extra-spring-web.xml</param-value>
    </init-param>
</servlet>

Где:

  • два контекста xml в пути к классам (внутри jar библиотеки exra):
    • extra-spring-web.xml
    • extra-spring-security.xml ( !!! как мне его настроить?)
  • extra-spring-security.XML
    • довольно стандартная конфигурация Spring Security
    • настроенный bean-компонент extraSecurityFilterBean
    • имеет зависимость от bean-компонентов из контекста -web (но это не обязательно)

Сейчас это работает наполовину:

  • как я вижу из журналов, сервлет extraSpring успешно загружает bean-компоненты из extra-spring-web.xml
  • , но после доступа к URL-адресу /extra/я получил NoSuchBeanDefinitionException : Компонент с именем «extraSecurityFilterBean» не определен.

Итак, вопрос, как определить контекст для DelegatingFilterProxy? Я даже пытался добавить эти файлы в основной контекст (параметр contextConfigLocation), это не то, что я ищу, но это не сработало.

Я просмотрел исходники DelegatingFilterProxy, но не понял, как он загружает контекст.

8
задан Igor Artamonov 3 July 2012 в 04:14
поделиться