登录时生产token和refreshtoken,请求时带上token,后台校验,通过的话则进行处理,否则返回错误信息(token失效过期等等),校验不通过会调用刷新token的接口,重新获取token,如果refreshtoken的话。
对应数据库表结构
1.生成token
返回给前端的数据结构
OAuth2TokenServiceImpl类的createAccessToken方法
这里client是客户端,对应system_oauth2_client表
这张表维护了token和refreshtoken的过期时间
创建刷新令牌
直接调用工具方法生成一个uuid,然后设置过期时间(system_oauth2_client表)
创建访问令牌
这样token和refreshtoken就生成了,登陆成功然后将信息返回给前端。
2.校验token
TokenAuthenticationFilter类的doFilterInternal方法
从请求头拿token
WebFrameworkUtils类的getLoginUserType方法
TokenAuthenticationFilter类的buildLoginUserByToken方法
mockLoginUser方法
这是为了swagger调试方便,模拟登陆
这样在swagger调用接口时token传入 bear test1 即可 1就是用户id
这样校验逻辑就走完了。
3.刷新token
前端如果收到401的回复(token无效),就请求刷新token的接口
OAuth2TokenServiceImpl类的refreshAccessToken方法
就是从数据库获取刷新令牌,如果有效就重新创建token。