2013-12-14 71 views
0

不管我做什么我都无法登出去工作。我有一个只有通过成员角色才能看到的菜单。我已经尝试了会话的无效,以及通过Spring文档的/ j_spring_security_logout ...都转发到主页,但菜单和凭证出现在主页上。因此注销不起作用。这是我的Spring Security.xml文件条目。通过Spring注销3安全

<logout logout-url="/logout"/> 
<logout logout-url="/j_spring_security_logout" logout-success-url="/home" 
     delete-cookies="JSESSIONID" invalidate-session="true"/> 

正如你所看到的我已经尝试了两种。这里是注销控制器。

@RequestMapping(value = "/logout", method=RequestMethod.GET) 
public String logout(HttpServletRequest request, HttpServletResponse response) { 
    logger.info("Logging out!"); 

    response.setHeader("pragma", "no-cache");    
    response.setHeader("Cache-control", "no-cache, no-store, must-revalidate"); 
    response.setHeader("Expires", "0"); 

    Cookie jSessionCookie = new Cookie("JSESSIONID", null); 
    jSessionCookie.setMaxAge(0); 
    response.addCookie(jSessionCookie); 
    Cookie activityIdCookie = new Cookie("activityId", null); 
    activityIdCookie.setMaxAge(0); 
    response.addCookie(activityIdCookie); 

    request.getSession().invalidate(); //Attempt to logout user.  

    return ("redirect://"); 
} 

任何帮助,非常感谢。

+0

*注销*由安全筛选器链处理(就像Spring Security中的几乎所有)。实际的*注销*请求将永远不会将其发送给调度程序servlet。不要手动实现注销逻辑(会话失效等)。请参阅*拉尔夫的*答案... –

回答

1

你只需要一个注销处理程序,并没有额外的控制器:

<logout logout-url="/logout" logout-success-url="/home" /> 

只是让用户请求的URL http://localhost/yourApp/logout

+0

但它不起作用... – user3103336

+0

我做到了..它带我到主页..问题是用户仍然在进入。他们的权限仍然存在,用户credentitals仍然存在。 – user3103336

+0

这是要走的路,如果它不起作用,问题一定在其他地方。你使用tomcat吗? tomcat管理器具有查看会话的功能。 Spring Security将其用户信息存储在会话中。您可以使用tomact管理器验证会话ID在注销时发生变化,并查看Spring安全性存储的信息。 – Ralph