1. 前言
今天我们来实战如何安全退出应用程序。
2. 我们使用 Spring Security 登录后都做了什么
这个问题我们必须搞清楚!一般登录后,服务端会给用户发一个凭证。常见有以下的两种:
-
基于
Session
客户端会存cookie
来保存一个sessionId
,服务端存一个Session
。 -
基于
token
客户端存一个token
串,服务端会在缓存中存一个用来校验此token
的信息。
2. 退出登录需要我们做什么
- 当前的用户登录状态失效。这就需要我们清除服务端的用户状态。
- 退出登录接口并不是
permitAll
, 只有携带对应用户的凭证才退出。 - 将退出结果返回给请求方。
- 退出登录后用户可以通过重新登录来认证该用户。
3. Spring Security 中的退出登录
接下来我们来分析并实战 如何定制退出登录逻辑。首先我们要了解 LogoutFilter
。
3.1 LogoutFilter
我们知道退出登录逻辑是由过滤器 LogoutFilter
来执行的。 它持有三个接口类型的属性:
RequestMatcher logoutRequestMatcher
这个用来拦截退出请求的URL
LogoutHandler handler
用来处理退出的具体逻辑LogoutSuccessHandler logoutSuccessHandler
退出成功后执行的逻辑
我们通过对以上三个接口的实现就能实现我们自定义的退出逻辑。