多个登录表单,不同的身份验证管理器 - 最新的弹簧安

时间:2011-11-29 04:59:16

标签: spring spring-security

我有一个使用Spring Security保护的Web应用程序需要两个单独的登录表单。这两种登录表单需要完全独立。我的意思是不同的登录表单,不同的URL路径,每个人都可以拥有不同的身份验证管理器。

我已经浏览了整个谷歌并且有一些方法可以做到这一点,但我已阅读并看到过去几周的一些更改应该可以在代码的最新快照版本中轻松完成此操作。

首先,由于此错误已完成SEC-1171,我们现在可以拥有多个名称空间元素来支持多个过滤器链配置。

其次,由于此其他错误显示SEC-1847,我们现在可以为每个http标记选择自定义身份验证管理器。

问题是我已下载,编译了所有内容,但我的xsd不允许我为每个http标签创建自定义auth管理器,每当我尝试更改登录处理URL或每当我尝试时,我也会收到错误为每个登录表单使用记住我的密钥。

我开始做这样的事情:

<!-- Configure realm for administration users -->
<http pattern="/admin/**" auto-config="true" disable-url-rewriting="true" >
    <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
    <form-login login-page="/adminLogin.htm" default-target-url="/" 
                login-processing-url="/loginProcessing" 
                authentication-failure-url="/adminLogin.htm?error" />
    <logout invalidate-session="true" logout-success-url="/" logout-url="/logout" />
<remember-me key="******" user-service-ref="userDetailsService" />
</http>

<!-- Configure realm for standard users -->
<http auto-config="true" disable-url-rewriting="true">
    <intercept-url pattern="/user/**" access="ROLE_USER" />
    <form-login login-page="/login.htm" default-target-url="/" 
                login-processing-url="/loginProcessing" 
                authentication-failure-url="/login.htm?error" />
    <logout invalidate-session="true" logout-success-url="/" logout-url="/logout" />
<remember-me key="******" user-service-ref="userDetailsService" />
</http>

<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService"  >
    <password-encoder ref="passwordEncoder"/>
</authentication-provider>

<authentication-provider>
    <password-encoder ref="passwordEncoder"/>
    <user-service>
                <user name="ned" password="****" authorities="ROLE_USER" />
            <user name="tom" password="****" authorities="ROLE_ADMIN"/>
    </user-service>
</authentication-provider>
</authentication-manager>

我正在使用Spring Security 3.1的最新快照。

正如我所说,理想的是能够使用最近在这些错误上更改的“新”方式使两种不同的登录表单完全独立。

任何人都使用过这个或有任何想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

正如您在commit log(2f67bb3) SEC-1847 {{3}}中所看到的那样{{3}},可以在http和global-method-security中添加authentication-manager-ref属性。 / p>

答案 1 :(得分:0)

Ritesh,你是对的,但是,如果我尝试在http元素中配置authentication-manager-ref,则会发生以下异常: org.xml.sax.SAXParseException:cvc-complex-type.3.2。 2:属性'authentication-manager-ref'不允许出现在元素'security:http'中。

在我的security.xml的标题中,我正在使用http://www.springframework.org/schema/security/spring-security-3.1.xsd。如果我浏览到这个URL,xsd加载会将属性authentication-manager-ref声明为http元素,但spring-security-config-3.1.0.RC2.jar中的xsd不会。

我在springource中创建了一个问题jira-&gt; https://jira.springsource.org/browse/SEC-1879

我将spring-security-config-3.1.0.RC3.jar中包含的xsd替换为正确的xsd,并且不再发生org.xml.sax.SAXParseException,但是不可能声明两个authentication-manager security.xml中的bean。