只有jwt令牌是不行的,需要我们配合拦截器去实现请求拦截。
这里我们配合使用了Redis作为存储token令牌的数据库,对比前端传来的token。
声明一个 LoginInterceptor类实现 HandlerInterceptor接口,在类上面加上 @Component注解交给spring容器管理。注入StringRedisTemplate来操作Redis
LoginInterceptor implements HandlerInterceptor@Autowired private StringRedisTemplate stringRedisTemplate;
String token = request.getHeader("Authoriztion");
try {
ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
String redisToken = operations.get(token);
if (redisToken == null){
//失效
throw new RuntimeException();
}
Map<String,Object> claims = JwtUtil.parseToken(token);
//把业务数据存储到ThreadLocal中
ThreadLocalUtil.set(claims);
return true; //放行
} catch(Exception e){
response.setStatus(401);
return false; //不放行
}