spring security中的多重身份验证管理器

时间:2014-09-20 06:41:51

标签: java authentication spring-security

我是春天安全的新手。我想为两种不同类型的用户提供两种不同的登录表单。我有一个名为/ admin的软件包,其中包含我的系统用户的主项目和/其他用户的/ portal./portal用户将在他们的租户上工作,不会对/ admin有任何了解,反之亦然。每个用户组都有自己的数据库也是。 在spring-security.xml中我定义了两个身份验证管理器,但是当我从两个登录表单登录时,它转到'AuthenticatingManager',但正如我在xml文件中提到的那样,对于/ portal用户,它应该转到PortalAuthenticatingManager。我该怎么办?或者我错过了什么?

<security:http use-expressions="true" pattern="/portal/**" authentication-manager-ref="portalAuthMgr"  access-denied-page="/unauthorized.jsp">
    <form-login login-page="/plLogin.jsp"  default-target-url="/portal/portal"  />
    <security:intercept-url pattern="/plLogin.jsp" access="permitAll"/>
<security:intercept-url pattern="/portal/**" access="hasRole('ROLE_PORTAL')" />
</security:http>
<security:http  authentication-manager-ref="adminAuthMgr" access-denied-page="/unauthorized.jsp">
    <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<security:form-login login-page="/login.jsp"  authentication-failure-handler-ref="authenticationFailureHandler"/>
</security:http>

<security:authentication-manager id="adminAuthMgr">
    <security:authentication-provider ref="produxAuthenticationProvider"/>
</security:authentication-manager>
<security:authentication-manager alias="portalAuthMgr">
    <security:authentication-provider ref="portalAuthenticationProvider"/>
</security:authentication-manager>

<beans:bean id="produxAuthenticationProvider" class="com.spring.AuthenticatingManager">
</beans:bean>
 <beans:bean id="portalAuthenticationProvider" class="com.spring.PortalAuthenticatingManager">
</beans:bean>

1 个答案:

答案 0 :(得分:1)

您的“门户”登录表单需要发布到以/portal/**开头的URL,否则登录请求将由第二个过滤器链处理。如果您使用/portal/j_spring_security_check

,它应该有效

请注意,您还可以使用login-processing-url元素上的form-login属性来控制过滤器响应的URL。为每个URL使用不同的URL可以避免一个人意外处理另一个请求的问题。