Spring安全性重定向到经过身份验证的URL的登录页面

时间:2018-02-28 07:07:53

标签: spring spring-mvc spring-security

我是春天新手。我正在创建一个spring mvc app。我有一个管理员网址" / admin /"。如果我使用ROLE_ADMIN登录用户凭据,那么我可以访问管理页面。现在这种情况正常。但是如果我没有使用ROLE_ADMIN登录并且我尝试访问/ admin / url spring security将我重定向到/ login页面。

这里我想要不向外界揭示/ admin /(或admin url存在)url需要身份验证。如果有人未经授权尝试访问/ admin / url,我想显示默认的异常页面或主页。

此外,我需要定制" / login" url like" / custom_url /"而不是" / login"

但是现在我不知道如何实现这一目标。任何帮助表示赞赏。

的applicationContext.xml

</bean>  
<security:http auto-config="true">
    <security:intercept-url pattern="/admin/**" 
access="hasRole('ROLE_ADMIN')" />

     <security:form-login
        login-page="/login"
        default-target-url="/admin"
        always-use-default-target="true"
        login-processing-url="/j_spring_security_check"
        authentication-failure-url="/login?error"
        username-parameter="username"
        password-parameter="password" />
   <security:logout logout-success-url="/" invalidate-session="true" logout-
url="/logout" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service data-source-ref="dataSource"
                                    authorities-by-username-query="SELECT 
username, authority From authorities WHERE username = ?"
                                    users-by-username-query="SELECT 
username, password, enabled FROM users WHERE username = ?" />
    </security:authentication-provider>
</security:authentication-manager>

登录控制器

@RequestMapping("/login")
public String login(@RequestParam(value="error", required = false) String 
error, @RequestParam(value="logout",
        required = false) String logout, Model model) {
    if (error!=null) {
        model.addAttribute("error", "Invalid username and password");
    }

    if(logout!=null) {
        model.addAttribute("msg", "You have been logged out successfully.");
    }

    return "login";
}

的login.jsp

   <c:if test="${not empty msg}">
            <div class="msg">${msg}</div>
        </c:if>

   <form name="loginForm" action="<c:url 
value="/j_spring_security_check" />" method="post">
            <c:if test="${not empty error}">
                <div class="error" style="color: #ff0000;">${error}</div>
            </c:if>
            <div class="form-group">
                <label for="username">User: </label>
                <input type="text" id="username" name="username" 
class="form-control" />
            </div>
            <div class="form-group">
                <label for="password">Password:</label>
                <input type="password" id="password" name="password" 
class="form-control" />
            </div>

            <input type="submit" value="Submit" class="btn btn-default">

            <input type="hidden" name="${_csrf.parameterName}" 
value="${_csrf.token}" />
        </form>

我正在使用Spring security 4。

1 个答案:

答案 0 :(得分:0)

authentication-failure-url="/login?error"更改为authentication-failure-url="/"。这会将您重定向到主页。

applicationContext.xml中的正确xml-snippet如下:

 <security:form-login
    login-page="/login"
    default-target-url="/admin"
    always-use-default-target="true"
    login-processing-url="/j_spring_security_check"
    authentication-failure-url="/"
    username-parameter="username"
    password-parameter="password" />

注意:您可以根据需要将authentication-failure-url属性的值更改为例外页面。