JWT实现统一认证服务应用

JWT实现统一认证服务应用

  1. 环境
    redis: 4.0.9

nacos: 1.3.1

启动nacos

cd /usr/local/nacos/bin

sh startup.sh -m standalone

2.自定义注解获取此当前登录用户
1)配置依赖
在这里插入图片描述
在这里插入图片描述

2)修改客户端配置文件

配置nacos注册中心地址和redis相关配置
在这里插入图片描述

3)通过自定义注解获取参数

自定义注解类CurrentUser,@Target配置注解所修饰范围为参数,@Retention定义了该Annotation被保留的时间长短,

RUNTIME在运行时有效,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时;

在这里插入图片描述

创建CurrentUserResolver类用于统一获取当前登录用户的参数解析器,实现接口HandlerMethodArgumentResolver中的两个方法supportsParameter、supportsParameter,用于自定义支持的参数和获取头部信息中所需数据
在这里插入图片描述

4)配置启动类

配置nacos发现服务信息,将自定义的参数解析器加入到统一的参数解析器中

在这里插入图片描述

5)配置获取登录信息的Controller

在这里插入图片描述

  1. 登录授权:token的生成
    1)修改配置文件

配置Token的生成密钥和过期时间,以及在redis存储token和失效的token

在这里插入图片描述

2)获取配置文件内相关信息

在这里插入图片描述

3)生成Token

头部Header使用HMAC256算法对secretKey进行加密,为生成的Token添加iss (issuer):签发人、签发时间、exp (expiration time):过期时间和签名
在这里插入图片描述

通过登录的用户名生成Token和refreshTokenKey,将token信息和登录的用户名存入redis中,并设置缓存时间,最后以map形式返回到页面信息显示

在这里插入图片描述

4.刷新Token
通过redis获取用户名,如果在2min内,redis中的数据未失效,则获取的用户名不为空,即通过用户名生成新的Token,将原来的Token信息获取出来存入token黑名单中设置失效时间并替换成新的Token

返回新的Token信息至页面

在这里插入图片描述

5.测试登录认证
1)测试自定义注解获取用户名

通过postman工具访问链接http://localhost:2222/hello更改传输数据包中的Header头部添加参数,可以看到页面返回了通过自定义解析器CurrentUserResolver获取头部信息中的userName
在这里插入图片描述

2)获取生成Token信息

以POST方式访问http://localhost:2222/auth?userName=wxl&password=wxl,页面会返回生成的Token信息和refreshTokenKey
在这里插入图片描述

进入redis可以看到此时在db1中生成了JWT_REFRESH_TOKEN的key,value是一个map,map中存储了生成的Token和userName

在这里插入图片描述

3)刷新Token

使用浏览器访问http://localhost:2222/refreshToken?refreshToken=a3807ad157b5420ebe63596e933d5a3b,参数是之前生成的refreshTokenKey,发现页面返回了新生成的Token信息

在这里插入图片描述

进入redis中,可以看到生成的JWT_BLACKLIST,Token黑名单用于存放已失效的Token信息

在这里插入图片描述

当过去两分钟后,再一次访问http://localhost:2222/refreshToken?refreshToken=a3807ad157b5420ebe63596e933d5a3b,会显示refreshToken已过期
在这里插入图片描述

而再一次进入redis后查看Token信息,会发现提示JWT_REFRESH_TOKEN都已不存在redis数据库中,是因为设置的缓存时间为120000ms为两分钟

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值