首先,介绍下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的同学不知道,可以自己查下)。
必要的几个命令:
#检测后台进程是否存在 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的数据库配置:
注:有集群需求的,可以配置redis_host2、redis_host3、redis_host4等等。
3.sring中applicationContext.xml的配置:
注:由于刚开始写简书,不是很会格式话,贴代码很乱,需要源码的私我,就行了。
本人菜鸟,不喜勿喷。
☀️☀️☀️