【郑州校区】学成在线-第16天-讲义- Spring Security Oauth2 JWT六
4 认证接口开发
4.1 需求分析
用户登录的流程图如下:
执行流程:
1、用户登录,请求认证服务
2、认证服务认证通过,生成jwt令牌,将jwt令牌及相关信息写入Redis,并且将身份令牌写入cookie
3、用户访问资源页面,带着cookie到网关
4、网关从cookie获取token,并查询Redis校验token,如果token不存在则拒绝访问,否则放行
5、用户退出,请求认证服务,清除redis中的token,并且删除cookie中的token
使用redis存储用户的身份令牌有以下作用:
1、实现用户退出注销功能,服务端清除令牌后,即使客户端请求携带token也是无效的。
2、由于jwt令牌过长,不宜存储在cookie中,所以将jwt令牌存储在redis,由客户端请求服务端获取并在客户端存
储。
4.2 Redis配置
4.2.1 安装Redis
1、安装Redis服务
下载Windows版本的redis:https://github.com/MicrosoftArchive/redis/tags
下载Redis-x64-3.2.100版本,解压Redis-x64-3.2.100.zip
进入cmd命令行,进入Redis-x64-3.2.100目录。
运行:
[AppleScript] 纯文本查看 复制代码 redis‐server redis.windows.conf
注册为服务:
[AppleScript] 纯文本查看 复制代码 redis‐server ‐‐service‐install redis.windows‐service.conf ‐‐loglevel verbose
刷新服务,会看到多了一个redis服务。
常用的redis服务命令如下:
进入redis安装目录:
卸载服务:redis-server.exe --service-uninstall
开启服务:redis-server.exe --service-start
停止服务:redis-server.exe --service-stop
2、redis-desktop-manager
下载windows版本的redis客户端:https://redisdesktop.com/download
下载redis-desktop-manager-0.9.2.806.exe
安装后启动redis客户端:
配置redis链接:
4.2.2 redis连接配置
在认证服务的application.yml文件中添加如下配置:
[AppleScript] 纯文本查看 复制代码 spring:
application:
name: xc‐service‐ucenter‐auth
redis:
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
timeout: 5000 #连接超时 毫秒
jedis:
pool:
maxActive: 3
maxIdle: 3
minIdle: 1
maxWait: ‐1 #连接池最大等行时间 ‐1没有限制
4.2.3 测试
[AppleScript] 纯文本查看 复制代码 @SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void testRedis(){
//定义key
String key = "user_token:9734b68f‐cf5e‐456f‐9bd6‐df578c711390";
//定义Map
Map<String,String> mapValue = new HashMap<>();
mapValue.put("id","101");
mapValue.put("username","itcast");
String value = JSON.toJSONString(mapValue);
//向redis中存储字符串
stringRedisTemplate.boundValueOps(key).set(value,60, TimeUnit.SECONDS);
//读取过期时间,已过期返回‐2
Long expire = stringRedisTemplate.getExpire(key);
//根据key获取value
String s = stringRedisTemplate.opsForValue().get(key);
System.out.println(s);
}
}
|