Я хочу использовать два разных веб-контекста Spring, каждый из которых имеет собственный contextConfig, сервлет Spring и фильтр, которые должны быть сопоставлены с разными URL-адресами. У меня есть
/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>
Где:
extraSecurityFilterBean
Сейчас это работает наполовину:
extraSpring
успешно загружает bean-компоненты из extra-spring-web.xml
/extra/
я получил NoSuchBeanDefinitionException
: Компонент с именем «extraSecurityFilterBean» не определен.Итак, вопрос, как определить контекст для DelegatingFilterProxy
? Я даже пытался добавить эти файлы в основной контекст (параметр contextConfigLocation), это не то, что я ищу, но это не сработало.
Я просмотрел исходники DelegatingFilterProxy, но не понял, как он загружает контекст.