Igo*_*nov 8 java grails spring spring-security
我想使用两个不同的Spring Web上下文,每个都有自己的contextConfig,spring servlet和filter,应该映射到不同的url.我有一个
/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>
Run Code Online (Sandbox Code Playgroud)
和spring dispatcher 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>
Run Code Online (Sandbox Code Playgroud)
哪里:
extraSecurityFilterBean
它现在半工作:
extraSpring
servlet成功加载了beanextra-spring-web.xml
/extra/
我得到了NoSuchBeanDefinitionException
:没有定义名为'extraSecurityFilterBean'的bean.那么,问题是,我如何定义上下文DelegatingFilterProxy
?我甚至试图将这些文件添加到主上下文(contextConfigLocation param)中,它不是我正在寻找的,但它不起作用.
我已经看了DelegatingFilterProxy源代码,但我不清楚它是如何加载上下文的.
根据我对这个问题的评论,如果定义了安全过滤器链,那么除了通过以下方式之一extra-spring-security.xml
之外,您还需要确保该文件由额外的 DispatcherServlet 加载extra-spring-web.xml
<import>
文件中的 -security 文件或将其配置为:
<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>contextConfigLocation</param-name>
<param-value>
classpath:extra-spring-web.xml
classpath:extra-spring-security.xml
</param-value>
</init-param>
</servlet>
Run Code Online (Sandbox Code Playgroud)
您还需要确保Grails应用程序中的安全过滤器不适用于/extra
URI,具体如何执行此操作取决于您是否使用注释、数据库 RequestMap 条目等。
归档时间: |
|
查看次数: |
3923 次 |
最近记录: |