【问题标题】:Spring Security 3.2 Multiple http tag with different Authentication ManagerSpring Security 3.2 具有不同身份验证管理器的多个 http 标记
【发布时间】:2014-04-02 19:37:27
【问题描述】:

我一直在尝试使用 spring security 3.2 创建一个 Web 应用程序。

我正在尝试使用不同的身份验证管理器实现两个登录页面。如果我使用 http-basic 表单,此配置可以正常工作,但是当使用表单登录时,我在 j_spring_security_check 上收到 404。任何想法 ?为什么这种情况下spring不生成j_spring_security_check?

提前致谢

<http pattern="/admin/login.html" security="none" />
<http pattern="/user/login.html" security="none" />

<http use-expressions="true" pattern="/user/**" authentication-manager-ref="userAuthMgr">
    <intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />
    <form-login login-page="/user/login.html" always-use-default-target="true" default-target-url="/user/index.html" />
</http>

<http use-expressions="true" pattern="/admin/**" authentication-manager-ref="adminAuthMgr">
    <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
    <form-login login-page="/admin/login.html" always-use-default-target="true" default-target-url="/admin/index.html" />
</http>

<debug/>

<authentication-manager id="adminAuthMgr">
    <authentication-provider>
        <user-service>
            <user name="admin" password="admin" authorities="ROLE_ADMIN" />
        </user-service>
    </authentication-provider>
</authentication-manager>

<authentication-manager id="userAuthMgr">
    <authentication-provider>
        <user-service>
            <user name="user" password="user" authorities="ROLE_USER" />
            <user name="vip" password="vip" authorities="ROLE_USER, ROLE_VIP" />
        </user-service>
    </authentication-provider>
</authentication-manager>

还有我的 login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<div class="container">
<form class="form-signin" role="form" action="<c:url value='/j_spring_security_check' />" method='POST'>
    <input type="text" name='j_username' class="form-control" placeholder="Username" required="" autofocus="">
    <input type="password" name='j_password' class="form-control" placeholder="Password" required="">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>

<c:if test="${not empty sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}">
    <div class="alert alert-danger">
        ${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}
    </div>
</c:if>

【问题讨论】:

标签: spring spring-security


【解决方案1】:

spring 的工作方式被设计为将一个身份验证管理器与一种或多种身份验证提供程序一起使用。

至于您的示例,为什么不使用一个身份验证管理器和身份验证提供程序并在两个 http 标记中引用它们。 从安全的角度来看,它不应该损害任何东西。 如果是,那么没有人会使用 Spring Security。

【讨论】:

    【解决方案2】:

    您可以使用多个身份验证提供程序:
    -一个“默认”身份验证提供程序:使用“别名”
    -others 身份验证提供者:带有 'id'

    <http use-expressions="true" pattern="/user/**" authentication-manager-ref="userAuthMgr">
    <intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />
    <form-login login-page="/user/login.html" always-use-default-target="true" default-target-url="/user/index.html" />
    </http>
    
    <http use-expressions="true" pattern="/admin/**" authentication-manager-ref="adminAuthMgr">
    <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
    <form-login login-page="/admin/login.html" always-use-default-target="true" default-target-url="/admin/index.html" />
    </http>
    
    <debug/>
    
    <!--default Authentication Provider -->
    <authentication-manager alias="adminAuthMgr">
      <authentication-provider>
        <user-service>
            <user name="admin" password="admin" authorities="ROLE_ADMIN" />
        </user-service>
      </authentication-provider>
    </authentication-manager>
    
    <authentication-manager id="userAuthMgr">
      <authentication-provider>
        <user-service>
            <user name="user" password="user" authorities="ROLE_USER" />
            <user name="vip" password="vip" authorities="ROLE_USER, ROLE_VIP" />
        </user-service>
      </authentication-provider>
    </authentication-manager>
    

    【讨论】:

    • 今天我发现这很有帮助,因为我开始使用大约 15 年的旧应用程序,并且有 2 个别名出现问题。将其中一个的标签更改为 id 有助于快速解决问题。
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多