登录时生产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。












![[pgrx开发postgresql数据库扩展]5.自定义函数与SQL组合应用](https://img-blog.csdnimg.cn/img_convert/ca0c0cdc318100d468b36c86e4a308b1.webp?x-oss-process=image/format,png)






![[HNCTF 2022 WEEK4]ezheap](https://img-blog.csdnimg.cn/11be67eefbb646ef88bfb1bd38a8feec.png)