我想使用两个不同的 Spring web contexts,每个都有自己的 contextConfig、spring servlet 和 filter,应该映射到不同的 url。我有一个
- 标准 Grails 项目,映射到 '/'
- 和一个现有的 Spring webapp,我想映射到
/extra/
我知道我可以将两者部署到一个 Tomcat 中,但我正在寻找一种制作一个应用程序(一个war
等)的方法,因为它可以简化我们的部署和开发过程。
这个应用程序不需要共享 bean 或任何东西,应该是完全独立的。两者都有 DispatcherServlet 和 DispatcherFilter (并且都使用 Spring Security,但配置不同)
我如何配置web.xml
这样的 webapp?
我试图添加新的过滤器:
<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>
<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(在 exra 库 jar 中):
- 额外的弹簧 web.xml
- extra-spring-security.xml ( !!!我应该如何配置它?)
- 额外的spring-security.xml
- 是非常标准的 Spring Security 配置
- 已配置bean
extraSecurityFilterBean
- 对来自 -web 上下文的 bean 有依赖(但不是必须的)
它现在处于半工作状态:
- 正如我从日志中看到的那样,
extraSpring
servlet 成功地从extra-spring-web.xml
- 但在访问 url 后,
/extra/
我得到NoSuchBeanDefinitionException
:没有定义名为“extraSecurityFilterBean”的 bean。
那么,问题是,我如何定义上下文DelegatingFilterProxy
?我什至尝试将此文件添加到主上下文(contextConfigLocation 参数)中,这不是我想要的,但它没有用。
我查看了 DelegatingFilterProxy 源,但我不清楚它是如何加载上下文的。