spring security3.x学习(11)_退出

本文为转载学习

原文链接:http://blog.csdn.net/dsundsun/article/details/11826949

如果我们想要在用户登陆后退出怎么办?

前边我们已经介绍过了,直接访问"/j_spring_security_logout"这个就可以被LogoutFilter类拦截,然后完成注销操作.那如果我们想做一个自定义的退出要怎么做呢?

<http auto-config="true" use-expressions="true">
  <logout invalidate-session="true" 
      logout-success-url="/" 
      logout-url="/j_spring_security_logout"/>
</http>

基于这个基本配置,系统将会寻找在logout-url属性配置的URL并实现用户的退出。使得用户退出系统将会涉及如下的三个步骤:
1.  使得HTTP session失效(如果invalidate-session属性被设置为true);
2.  清除SecurityContex(真正使得用户退出);

3.  将页面重定向至logout-success-url指明的URL。 

注意:如果我们改掉logout-url值,那么我们退出的值将会改成我们自己的logout-url值

spring security3.x学习(11)_退出_第1张图片

从这个图中我们可以看出来,其实真正清理对象和资源的是LogoutHandler,我们看看她的源码会发现

public abstract interface LogoutHandler
{
  public abstract void logout(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Authentication paramAuthentication);
}

其实他只有这么一个方法,如果有必要的话,我们可以实现这个接口(但是尽量不这么做),当清理完资源以后,又通过LogoutSuccessHandler这个可以重定向一个成功的url页面。就是我们刚刚提到logout标签中的logout-success-url属性值,看看书中给我们的重要信息:

值得注意的是,退出的处理不应该抛出异常,因为很重要的一点是要在用户的安全session中避免可能出现的潜在不一致性。所以在实现自己的安全处理时要保证异常被正确的处理和记录

那么,关于logout的属性还有相关的一些说明:

spring security3.x学习(11)_退出_第2张图片

这是书中提到的,其实通过查看官方文档,我们会发现。其实还有一个属性delete-cookies,这是用来删除cookies的


你可能感兴趣的:(SpringSecurity)