jwt基于Spring及Redis的鉴权

首先,介绍下jwt(json web token)。

jwt包括3个部分:

Header (头部)、Payload (负载)、Signature (签名),其实token就可以理解为一个身份验证的令牌、票据。

1⃣️header ='{"alg":"HS256","typ":"JWT"}'  其中 alg表示该令牌的加密方式,type不用管。

2⃣️Payload负载部分 就是具体的认证信息,通过修改这部分的内容来控制认证信息如用户权限等。除了一些保留字段exp(过期时间)、aud、iss等外,使用方法跟普通Json一样。

3⃣️Signature 就是密钥。

token =encodeBase64(header) +'.'+ encodeBase64(payload) +'.'+encodeBase64(signature)

令牌尾部拼接上base64url编码的签名,就是token了。

其次,介绍下redis。

redis是一个高性能的key-value数据库,性能极高,读取很快。

特点1⃣️ Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

特点2⃣️ Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

特点3⃣️ Redis支持数据的备份,即master-slave模式的数据备份。

本地,可以安装一个redis的库玩玩。去官网直接对照你的系统下载安装包,我下的是dmg的。直接安装完成好后。默认路径是:/usr/local/bin(win的同学不知道,可以自己查下)。


默认路径


jwt基于Spring及Redis的鉴权_第1张图片
启动命令:./redis-server &

必要的几个命令:

#检测后台进程是否存在          ps -ef |grep redis

#检测6379端口是否在监听     netstat -lntp | grep 6379

#进入redis数据库的命令行     ./redis-cli 

查询所有的key值                     127.0.0.1:6379> keys * (empty list or set) 

进入正文,基于spring的token+redis身份验证。

1⃣️该模式下的身份验证过程:

=>用户通过登录请求提交用户名和密码,服务端验证通过后生成一个Token与该用户进行关联,并将Token返回给客户端。

=>客户端在接下来的请求中都会携带Token,服务端通过解析Token检查登录状态。

=>当用户退出登录、其他终端登录同一账号(被顶号)、长时间未进行操作时Token会失效,这时用户需要重新登录。

2⃣️实现示例:

1.添加必要的jar包,java-jwt、jedis、jjwt、spring-data-redis

2.添加redis的数据库配置:


jwt基于Spring及Redis的鉴权_第2张图片
redis.properties

注:有集群需求的,可以配置redis_host2、redis_host3、redis_host4等等。

3.sring中applicationContext.xml的配置:


jwt基于Spring及Redis的鉴权_第3张图片
redis连接池配置


jwt基于Spring及Redis的鉴权_第4张图片
模版和业务类注入配置


jwt基于Spring及Redis的鉴权_第5张图片
创建token的方法(供参考)


jwt基于Spring及Redis的鉴权_第6张图片
删除方法


jwt基于Spring及Redis的鉴权_第7张图片
解析方法

注:由于刚开始写,不是很会格式话,贴代码很乱,需要源码的私我,就行了。

本人菜鸟,不喜勿喷。

☀️☀️☀️

你可能感兴趣的:(jwt基于Spring及Redis的鉴权)