【问题标题】:multiple authentication manager in spring securityspring security中的多个身份验证管理器
【发布时间】:2014-09-20 22:59:33
【问题描述】:

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

【问题讨论】:

  • 你需要重做缩进:|

标签: java authentication spring-security


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我按照您所说的做了,但现在在尝试从 plLogin 登录后,它不会触发“AuthenticatingManager”或“PortalAuthenticatingManager”。我也添加了 login-processing-url="/portal/**" 但它没有用。当我将门户登录表单中的表单操作属性更改为 action="/portal/j_spring_security_check" 时,它只是转到'@ 987654321@' 内容为空白,不会触发我的 'PortalAuthenticatingManager' 类。
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 2013-04-03
相关资源
最近更新 更多