最近有个粉丝提了个问题,说他在Spring Security中用JWT做退出登录的时无法获取当前用户,导致无法证明“我就是要退出的那个我”,业务失败!经过我一番排查找到了原因,而且这个错误包括我自己的大部分人都犯过。
Session会话
之所以要说Session会话,是因为Spring Security默认配置就是有会话的,所以当你登录以后Session就会由服务端保持直到你退出登录。只要Session保持住,你的请求只要进入服务器就可以从ServletRequest
中获取到当前的HttpSession
,然后会根据HttpSession
来加载当前的SecurityContext
。相关的逻辑在Spring Security默认的过滤器SecurityContextPersistenceFilter
中,有兴趣可以看相关的源码。