当前位置: 首页 > 知识库问答 >
问题:

组合DispatcherServlet、ContextLoaderListener和SpringSecurity

向苗宣
2023-03-14

我在这里有很多问题要解决。一直试图将上述3项技术集成到我们的WebApp中…我们要使用

    null

web.xml:

<!-- Needed by Spring -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dw-manager-context.xml</param-value>
</context-param>

<!-- Needed by Spring MVC -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Needed by Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

我的servlet-context.xml:

<!-- Scan for controllers -->
<context:component-scan base-package="dw.manager" />

<!-- Need to declare annotation driven transactions again so they are picked up above controller methods -->
<tx:annotation-driven transaction-manager="transactionManager" />

<mvc:annotation-driven />

<bean id="viewResolver"     class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <!-- ... -->
</bean>

<bean id="freemarkerConfig"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <!-- ... -->
</bean>

My manager-context.xml:

<context:annotation-config />   

    <!-- deployment-setup just loads properties (files) -->
<import resource="deployment-setup.xml" />
<import resource="spring-security-context.xml" />
<import resource="dw-manager-datasource.xml" />

<!-- Import sub-modules -->
<import resource="classpath:dw-security-context.xml" />
<!-- ... -->
<http pattern="/login" security="none" />
<http pattern="/accessDenied" security="none" />
<http pattern="/" security="none" />

<!-- enable use of expressions, define URL patterns and login/logout forms 
    and targets) -->
<http use-expressions="true" access-denied-page="/accessDenied">
    <intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
    <!-- more stuff -->
</http>

<!-- a lot more... -->

编辑2

我认为主要的问题是SpringSecurity需要webapp上下文(ContextLoaderListener)才能工作,但web应用程序是在servlet上下文中运行的。控制器方法由servlet上下文映射,因此在servlet上下文之外运行的spring security不会得到事件通知,过滤器也不会启动。

共有1个答案

卢嘉誉
2023-03-14

叹息…我不知道为什么第一次不起作用,可能是错误的解决方案在缓存中,而尝试正确的解决方案…然而,它现在工作的方式,我发布它。谢谢阿伦给你时间。

现在唯一的问题是:spring-test-mvc不支持Spring Security的FilterChain,但这是另一个问题…

 类似资料:
  • 本文向大家介绍Spring中DispatcherServlet和ContextLoaderListener之间的区别,包括了Spring中DispatcherServlet和ContextLoaderListener之间的区别的使用技巧和注意事项,需要的朋友参考一下 ContextLoaderListener为Web应用程序创建根Web应用程序上下文,并将其放在ServletContext中。无论

  • 问题内容: 使用 DispatcherServlet时 ,出现 java.lang.IllegalStateException:未找到WebApplicationContext:未注册ContextLoaderListener吗? 使用 DelegatingFilterProxy 过滤器时出错。因此,我删除了 DispatcherServlet ,现在改用 ContextLoaderListene

  • 问题内容: 一个标准的Spring Web应用程序(由Roo或“ Spring MVC Project”模板创建)使用和创建一个。为什么他们不仅使用并使其加载完整的配置? 我知道应该使用来加载与Web不相关的内容,而用于加载与Web相关的内容(控制器等)。这样就产生了两个上下文:父上下文和子上下文。 背景: 我用这种标准方式做了几年了。 这通常会导致两个上下文及其之间的依存关系出现问题。过去,我总

  • Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。它与Spring IoC容器做到了无缝集成,这意味着,Spring提供的任何特性,在Spring MVC中你都可以使用。 下图展示了

  • 本文向大家介绍SpringMVC DispatcherServlet组件实现解析,包括了SpringMVC DispatcherServlet组件实现解析的使用技巧和注意事项,需要的朋友参考一下 tomcat容器启动加载web.xml初始化springmvc相关策略组件 一、WebApplicationContext的层次结构 本来是想研究一下springMVC组件的,结果解决了以前的一个疑问。W

  • 我目前正在尝试将我的项目从Java EE转移到Spring Boot项目。但是,我对dispatcher servlet和web.xml的部分感到困惑,项目似乎不再读取web.xml了。当前项目正在Tomcat7上运行。 我在下面附上了的示例,版本是2.5。 QNS: 我是否应该将中的所有内容转换为依赖spring dispatcher,如果是的话,我该如何实现呢? 是否正在远离作为spring