Spring Security - 显示注销消息

时间:2015-12-06 07:55:37

标签: spring spring-security

基于Spring安全java的配置是(它不是spring mvc,只是servlet webapp)

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login.jsp")
                .permitAll();
    }

,登录页面是

<form name='loginForm' action="" method='POST'>

            <c:if test="${param.logout != null}">
                <p>You have been logged out.</p>
            </c:if>

            <table>
                <tr>
                    <td>User:</td>
                    <td><input type='text' name='username'></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><input type='password' name='password' /></td>
                </tr>
                <tr>
                    <td colspan='2'><input name="submit" type="submit"
                        value="submit" /></td>
                </tr>
            </table>

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

        </form>

并且还有其他包含注销链接的页面,因此注销操作为logout(第2页)

<form action="logout" method="post">
      <input type="submit" value="Logout" />
      <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    </form>

在我成功插入然后按下注销按钮(从第2页开始)后,它返回到登录页面,但登录页面未显示注销消息<c:if test="${param.logout != null}">。之后我尝试再次登录,但它不起作用(它只在登出后登录)并向我显示一个注销消息。为什么它以这种方式工作以及如何修复它以在注销后立即显示注销消息。

2 个答案:

答案 0 :(得分:1)

尝试配置注销

http
        .logout()                                                                
            .logoutUrl("/logout")                                                 
            .logoutSuccessUrl("/login")  

答案 1 :(得分:0)

希望这会有所帮助。

Java配置

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests().anyRequest().authenticated().and()
    .formLogin()
    .loginPage("/loginPage")
    .loginProcessingUrl("/authenticateUser")
    .permitAll()
    .and()
    .logout()
    .permitAll();
}

在注销页面

    <form:form action="${pageContext.request.contextPath}/logout" 
                               method="POST" >                     
        <input type="submit" value="logout">                                       
   </form:form>