【问题标题】:Spring security with GAE使用 GAE 的 Spring 安全性
【发布时间】:2012-07-03 00:56:47
【问题描述】:

我正在尝试为我的 GAE 应用程序实现 Spring 安全性,但出现此错误:

No bean named 'springSecurityFilterChain' is defined

我将此配置添加到我的 web.xml:

<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>
</filter-mapping>  

并且在应用上下文中:

<!-- Configure security -->
<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider>
        <security:user-service>
            <security:user name="jimi" password="jimi" authorities="ROLE_USER, ROLE_ADMIN" />
            <security:user name="bob" password="bob" authorities="ROLE_USER" />
        </security:user-service>
    </security:authentication-provider>  
</security:authentication-manager>

什么可能导致错误?

【问题讨论】:

    标签: spring google-app-engine spring-security


    【解决方案1】:

    即使您没有在 web.xml 中指定 contextConfigLocation,上下文实现也会使用默认位置(使用 XmlWebApplicationContext:“/WEB-INF/applicationContext.xml”)。

    所以我认为你已经有一个 applicationContext.xml 但没有在你的 web.xml 中指定,但是 Spring 能够为你加载它。但是现在您在一个单独的文件中有一个额外的安全配置。因此,您需要在 web.xml 中像这样指定这个新文件 applicationContext-security.xml 的位置:

    这将处理这两个文件:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
    </context-param>
    

    或者您可以单独指定为逗号或空格分隔的列表,如下所示:

    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml /WEB-INF/applicationContext-security.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    .....
    

    Documentation: ContextLoader

    【讨论】:

    • 我实际上将 Spring 安全过滤器放在了 spring-context.xml 中,这是 web.xml 中定义的 applicationContext,我需要将它放在单独的 spring 配置文件中吗?
    • 不,您不必将它们放在一个文件中。
    • 您是否将 spring 安全模式声明 xmlns:security="springframework.org/schema/security" 和位置添加到您的 spring-context.xml
    • 是的,我在上下文 xml 中有这个,否则会导致错误
    • 您能否发布您的完整应用程序上下文以及您的 DD
    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2012-03-01
    • 2015-12-07
    • 2014-03-02
    • 2015-04-10
    • 2019-09-23
    • 2013-09-15
    相关资源
    最近更新 更多