基于Redis的 Jwt Token续期

后端拦截器代码

/**
 * @author crlion
 */
@Component
public class AuthInterceptor implements HandlerInterceptor {

    @Resource
    private RedisOperator redisOperator;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        //判断请求方式,通过所有OPTION请求
        if ("OPTIONS".equals(request.getMethod().toUpperCase())) {
            return true;
        }
        System.err.println("==================进入拦截器了==================");
        String url = request.getRequestURL().toString();
        String token = request.getHeader("Authorization");
        System.err.println("url:" + url + "    token:" + token);
        if (JwtUtils.checkToken(request)) {
            System.err.println("无效Token!");
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            ResultList result = new ResultList(new Meta(Code.Auth_ERR, "无效Token!"), null);
            response.getWriter().println(JSON.toJSONString(result));
            response.getWriter().flush();
            return false;
        } else
        if (redisOperator.get(token) == null) {
            System.err.println("Token过期!");
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            ResultList result = new ResultList(new Meta(Code.Auth_ERR, "Token过期!"), null);
            response.getWriter().println(JSON.toJSONString(result));
            response.getWriter().flush();
            return false;
        }else
        if (redisOperator.ttl(token)<RedisConst.CHECK_TIME) {
            System.err.println("Token续期!");
            System.err.println("续期前:"+redisOperator.ttl(token));
            redisOperator.set(token,token, RedisConst.AUTH_TIME);
            System.err.println("续期后:"+redisOperator.ttl(token));
            return true;
        }else {
            System.err.println("Token正常!");
            System.err.println("Token剩余时间:" + redisOperator.ttl(token));
            return true;
        }
    }
}

前端拦截器代码

const myInterceptor = axios.interceptors.response.use(response => {
    if(response.data.meta !==undefined && response.data.meta.code === 40011){
        axios.interceptors.request.eject(myInterceptor);
        window.sessionStorage.clear();
        alert(response.data.meta.msg);
        window.location.reload();
    }
    return response;
}, error  => {
    alert('error');
    console.log(error);
    console.dir(error);
    return Promise.reject(error);
});

后端运行结果

==================进入拦截器了==================
url:http://localhost:8080/getPostList    token:ey...省略
Token续期!
续期前:8
续期后:10
==================进入拦截器了==================
url:http://localhost:8080/searchDictType    token:eyJ0...省略
Token过期!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值