我是春天安全的新手。我想为两种不同类型的用户提供两种不同的登录表单。我有一个名为/ 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>
答案 0 :(得分:1)
您的“门户”登录表单需要发布到以/portal/**
开头的URL,否则登录请求将由第二个过滤器链处理。如果您使用/portal/j_spring_security_check
请注意,您还可以使用login-processing-url
元素上的form-login
属性来控制过滤器响应的URL。为每个URL使用不同的URL可以避免一个人意外处理另一个请求的问题。