【发布时间】:2012-06-26 10:28:20
【问题描述】:
我想使用两个不同的 Spring web 上下文,每个都有自己的 contextConfig、spring servlet 和 filter,应该映射到不同的 url。我有一个
- 标准 Grails 项目,映射到“/”
- 还有一个现有的 Spring webapp,我想映射到
/extra/
我知道我可以将两者部署到一个 Tomcat 中,但我正在寻找一种制作一个应用程序的方法(一个 war 等),因为它可以简化我们的部署和开发过程。
这个应用程序不需要共享 bean 或任何东西,应该是完全独立的。两者都有 DispatcherServlet 和 DispatcherFilter(并且都使用 Spring Security,但配置不同)
如何为此类 webapp 配置 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>
<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 中):
- 额外的spring-web.xml
- extra-spring-security.xml(!!!应该如何配置?)
- 额外的spring-security.xml
- 是相当标准的 Spring Security 配置
- 已配置bean
extraSecurityFilterBean - 对来自 -web 上下文的 bean 有依赖(但不是必须的)
它现在处于半工作状态:
- 我从日志中看到,
extraSpringservlet 成功地从extra-spring-web.xml加载了 bean - 但在访问 url
/extra/后,我得到了NoSuchBeanDefinitionException:没有定义名为“extraSecurityFilterBean”的 bean。
那么,问题来了,我如何为DelegatingFilterProxy 定义上下文?我什至尝试将此文件添加到主上下文(contextConfigLocation 参数)中,这不是我想要的,但它没有用。
我查看了 DelegatingFilterProxy 源,但我不清楚它是如何加载上下文的。
【问题讨论】:
-
我认为您不必编辑 grails web.xml。你可以用tomcat和apache得到你想要玩的东西。在 tomcat '/app1' 和 '/app2' 中部署两个独立的应用程序。在 apache 中,所有请求都映射到 '/**' => '/app1/**' 除了那些额外的 '/extra/**' => '/app2/**'
-
是的,我知道,谢谢。但我确信应该有一种方法可以只使用一个 web.xml / 将两者放入一个 WAR
-
你如何加载
extra-spring-security.xml?你没有在 web.xml sn-p 中命名它,它是extra-spring-web.xml中的<import>吗? -
@IanRoberts 是的,这是问题所在,我不知道如何加载
extra-spring-security.xml。它应该由SpringSecurityFilterChain使用,但我不明白如何为其配置上下文路径 -
我的意思是,我尝试了不同的选项,但没有找到任何工作
标签: java spring grails spring-security