如果我们想要在用户登陆后退出怎么办?
1. 使得HTTP session失效(如果invalidate-session属性被设置为true);
2. 清除SecurityContex(真正使得用户退出);
前边我们已经介绍过了,直接访问"/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并实现用户的退出。使得用户退出系统将会涉及如下的三个步骤:<logout invalidate-session="true"
logout-success-url="/"
logout-url="/j_spring_security_logout"/>
</http>
1. 使得HTTP session失效(如果invalidate-session属性被设置为true);
2. 清除SecurityContex(真正使得用户退出);
3. 将页面重定向至logout-success-url指明的URL。
注意:如果我们改掉logout-url值,那么我们退出的值将会改成我们自己的logout-url值
”
从这个图中我们可以看出来,其实真正清理对象和资源的是LogoutHandler,我们看看她的源码会发现
public
abstract
interface
LogoutHandler
{
public
abstract
void
logout(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Authentication paramAuthentication);
}
其实他只有这么一个方法,如果有必要的话,我们可以实现这个接口(但是尽量不这么做),当清理完资源以后,又通过LogoutSuccessHandler这个可以重定向一个成功的url页面。就是我们刚刚提到logout标签中的logout-success-url属性值
看看书中给我们的重要信息:
"
值得注意的是,退出的处理不应该抛出异常,因为很重要的一点是要在用户的安全session中避免可能出现的潜在不一致性。所以在实现自己的安全处理时要保证异常被正确的处理和记录
"
那么,关于logout的属性还有相关的一些说明:
这是书中提到的,其实通过查看官方文档,我们会发现。其实还有一个属性
delete-cookies,
这是用来删除cookies的