使用多个HTTP元素定义错误Spring安全性

时间:2014-01-19 00:09:41

标签: spring spring-security

我想在我的应用程序中为两个独立的部分创建两个单独的登录页面,所以我按照Spring安全文档的指示在security-context.xml文件中添加了一个新的http元素但是我得到了以下内容每当我尝试运行应用程序时出错:

  

通用匹配模式('/ **')在其他模式之前定义   过滤器链,导致它们被忽略。请检查   在命名空间或FilterChainProxy bean中排序   构造

这是我的security-context.xml文件:

<security:http auto-config="true" use-expressions="true">
    <security:form-login login-page="/login"
        default-target-url="/admin/dashboard" always-use-default-target="true"
        authentication-failure-url="/login/?error_msg=wrong username or password" />
    <security:intercept-url pattern="/admin/*" access="hasRole('ROLE_SUPERADMIN')" />       
    <security:logout logout-success-url="/login"/>
</security:http>

<security:http auto-config="true" use-expressions="true">
    <security:form-login login-page="/customer-portal/login"
        default-target-url="/customer-portal/dashboard" always-use-default-target="true"
        authentication-failure-url="/customer-portal/login/?error_msg=wrong username or password" />
    <security:intercept-url pattern="/customer-portal/*" access="hasRole('ROLE_ADMIN')" />      
    <security:logout logout-success-url="/customer-portal/login"/>
</security:http>

<security:authentication-manager>
    <security:authentication-provider
        user-service-ref="userServiceImpl">
    </security:authentication-provider>
</security:authentication-manager>

搜索网页后,我发现了一些删除auto-config的建议,尝试了但是它没有用...所以我想知道是否有人可以请告诉我这里缺少什么以及如何解决此错误?

由于

1 个答案:

答案 0 :(得分:1)

目前您有两个http块,每个块都有/**模式,导致冲突 - 您只能将一个过滤器链应用于请求。

尝试更改您的第一个http块以使用

<security:http pattern="/admin/**" use-expressions="true">

只会将该过滤器链应用于匹配该路径的请求,并将删除冲突。