如何在自定义登录页面中获取注销消息

时间:2016-10-12 07:24:14

标签: java spring spring-mvc spring-security

我必须使用Spring Security为我的项目创建一个登录模块,我已覆盖configure(HttpSecurity http)的{​​{1}}方法,并创建了一个自定义登录页面。

WebSecurityConfigurerAdapter

customLogin.jsp

这是我的配置方法:

<body>

    <h3>Login Here</h3>
    <font color="red">
       ${SPRING_SECURITY_LAST_EXCEPTION.message}
    </font>

    <form action="<%=request.getContextPath()%>/appLogin" method="POST">
        Enter UserName: <input type="text" name="app_username"/><br/><br/>
        Enter Password: <input type="password" name="app_password"/> <br/><br/>         
        <input type="submit" value="Login"/>
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>         
    </form>

<body>  

在我有注销按钮的地方,我已经包含以下代码(因为Spring Security会自动启用CSRF,它会自动禁用@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/secure/**").access("hasRole('ROLE_ADMIN')"). and().formLogin(). // login configuration loginPage("/customLogin.jsp"). loginProcessingUrl("/appLogin"). usernameParameter("app_username"). passwordParameter("app_password"). defaultSuccessUrl("/secure/home"). and().logout(). // logout configuration logoutUrl("/appLogout"). logoutSuccessUrl("/customLogin.jsp"); } 注销):

GET

当我点击退出按钮时,它会将我重定向到自定义登录页面,但是没有显示默认的注销消息。我怎么能在这里得到这个消息?

3 个答案:

答案 0 :(得分:2)

请参阅Spring Security Reference

  

使用JSP为我们当前配置实现的示例登录页面如下所示:

     

[..]

     
<c:url value="/login" var="loginUrl"/>
<form action="${loginUrl}" method="post">       1
  <c:if test="${param.error != null}">        2
      <p>
          Invalid username and password.
      </p>
  </c:if>
  <c:if test="${param.logout != null}">       3
      <p>
          You have been logged out.
      </p>
  </c:if>
  <p>
      <label for="username">Username</label>
      <input type="text" id="username" name="username"/>  4
  </p>
  <p>
      <label for="password">Password</label>
      <input type="password" id="password" name="password"/>  5
  </p>
  <input type="hidden"                        6
      name="${_csrf.parameterName}"
      value="${_csrf.token}"/>
  <button type="submit" class="btn">Log in</button>
</form>
     

1 /login URL的POST将尝试对用户进行身份验证   2如果查询参数error存在,则尝试进行身份验证并失败   3如果查询参数logout存在,则表示用户已成功注销

此外,您还需要向logout添加查询参数logoutSuccessUrl

您修改的Java配置是:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().
        antMatchers("/secure/**").access("hasRole('ROLE_ADMIN')").
        and().formLogin().  // login configuration
            loginPage("/customLogin.jsp").
            loginProcessingUrl("/appLogin").
            usernameParameter("app_username").
            passwordParameter("app_password").
            defaultSuccessUrl("/secure/home").  
        and().logout().    // logout configuration
            logoutUrl("/appLogout"). 
            logoutSuccessUrl("/customLogin.jsp?logout");
}

答案 1 :(得分:0)

添加到您的customLogin.jsp页面:

<div th:if="${param.logout}" class="alert alert-success">Logged out Sucessfully!</div>

答案 2 :(得分:0)

<!-- logout message --> <div th:if="${param.logout}"> <div class="alert alert-info">You have been logged out.</div> </div>

你可以使用它。