如何使用Spring Web Mvc实现Logout功能

Nir*_*mal 7 java spring spring-mvc

我是Spring Web MVC的新手..

我可以获得一些示例或在线链接,向我展示如何使用spring web mvc实现注销功能吗?

我不想使用弹簧安全的内置功能(即ACEGI)..

提前致谢...

30t*_*thh 14

会话失效的诀窍不起作用.似乎Spring身份验证会在某处缓冲会话ID,并且如果会话失效,则甚至接受COOKIE.

另一种解决方案是手动清除Spring安全上下文:

public void manualLogout() {
    SecurityContextHolder.getContext().setAuthentication(null);
}
Run Code Online (Sandbox Code Playgroud)

这是代码,如何手动登录用户(如果有人需要):

public void doManualLogin(HttpServletRequest request, String u, String p) {
    UsernamePasswordAuthenticationToken token = 
            new UsernamePasswordAuthenticationToken(u, p);
    token.setDetails(new WebAuthenticationDetails(request));
    Authentication auth = authenticationProvider.authenticate(token);
    SecurityContextHolder.getContext().setAuthentication(auth);
}
Run Code Online (Sandbox Code Playgroud)

其中authenticationProvider是您实现的spring配置中的bean

org.springframework.security.authentication.AuthenticationProvider
Run Code Online (Sandbox Code Playgroud)


Tho*_*ung 9

您只需使会话无效并且用户已注销.servlet api:HttpSession.invalidate()直接支持这一点.您可以编写一个仅调用invalidate的控制器.

class Logout implements Controller{
 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
   ModelAndView view = //?;
   request.getSession().invalidate();
   return view;
 }      
}
Run Code Online (Sandbox Code Playgroud)