使用demo学习,其实在之前教程中,在FilterChainProxy中看到过LogoutFilter,这个就是默认的登出Filter;
源码分析
首先浏览器访问http://localhost:8035/,输入用户名root和密码root完成登录;然后在FilterChainProxy打断点如下:
然后浏览器访问http://localhost:8035/logout ,进入断点:
可看到LogoutFilter,放开断点,直到进入LogoutFilter:
进入requiresLogout方法:
可以看到只要是/logout请求,均判断为登出请求;debug放行到执行登出方法,进入logout方法:
可以看到有两个handler,分别是SecurityContextLogoutHandler和LogoutSuccessEventPublishingLogoutHandler,
进入SecurityContextLogoutHandler:
LogoutSuccessEventPublishingLogoutHandler就是发送一个登出成功的事件,供用户自定义订阅方法;
debug放行进入onLogoutSuccess方法:
可知默认重定向到/login?logout
debug放行,可知执行return方法,不会后续的Filter:
取消所有断点,页面渲染:
经验总结
总结可知,登出最重要的就是session置为无效并清理认证结果,即SecurityContextLogoutHandler,如果想自定义登出接口,可以实现为:
Java |