共计 811 个字符,预计需要花费 3 分钟才能阅读完成。
## CheckToken 的目的 当用户携带 token 请求资源服务器的资源时, OAuth2AuthenticationProcessingFilter 拦截 token,进行 token 和 userdetails 过程,把无状态的 token 转化成用户信息。
## 详解
OAuth2AuthenticationManager.authenticate(),filter 执行判断的入口
当用户携带 token 去请求微服务模块,被资源服务器拦截调用 RemoteTokenServices.loadAuthentication , 执行所谓的 check-token 过程。
源码如下
CheckToken 处理逻辑很简单,就是调用 redisTokenStore 查询 token 的合法性,及其返回用户的部分信息(username)
继续看 返回给 RemoteTokenServices.loadAuthentication 最后一句 tokenConverter.extractAuthentication 解析组装服务端返回的信息
最重要的 userTokenConverter.extractAuthentication(map);
最重要的一步,是否判断是否有 userDetailsService 实现,如果有 的话去查根据 返回的
username 查询一次全部的用户信息,没有实现直接返回 username,这也是很多时候问的为什么只能查询到 username 也就是 EnablePigxResourceServer.details true 和 false 的区别。
那根据的你问题,继续看 UerDetailsServiceImpl.loadUserByUsername 根据用户名去换取用户全部信息。
关于 pig
基于 Spring Cloud、oAuth2.0 开发基于 Vue 前后分离的开发平台,支持账号、短信、SSO 等多种登录,提供配套视频开发教程。https://gitee.com/log4j/pig