我是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>

最佳答案

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

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

关于java - Spring Security中的多重身份验证管理器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25946044/

10-11 22:32