首页 文章

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

提问于
浏览
1

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

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

此外,我需要自定义“/ login”网址,如“/ 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

    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" />
    

    Note: 您可以根据需要将 authentication-failure-url 属性的值更改为异常页面 .

相关问题