返回顶部
首页 > 资讯 > 精选 >JWT设置token过期时间无效怎么解决
  • 109
分享到

JWT设置token过期时间无效怎么解决

2023-07-02 16:07:30 109人浏览 八月长安
摘要

这篇文章主要介绍了Jwt设置token过期时间无效怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JWT设置token过期时间无效怎么解决文章都会有所收获,下面我们一起来看看吧。JWT 设置token过期

这篇文章主要介绍了Jwt设置token过期时间无效怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JWT设置token过期时间无效怎么解决文章都会有所收获,下面我们一起来看看吧。

JWT 设置token过期时间无效

原因

设置超时时间的顺序有误, 应调用setClaims()方法设置claims属性。

在调用setExpiration()方法设置超时时间。

Date expiresDate = new Date(System.currentTimeMillis() + expire_time);// expire_time为token有效时长, 单位毫秒

错误顺序示例: 

JwtBuilder result = Jwts.builder()                .setExpiration(date) // 超时时间设置在 setClaims之前        .setClaims(claims)         .signWith(SignatureAlGorithm.HS256, Constants.BASE64SECRET);

正确顺序示例:

JwtBuilder result = Jwts.builder()        .setClaims(claims) // 先调用setClaims, 在调用setExpiration        .setExpiration(date)        .signWith(SignatureAlgorithm.HS256, Constants.BASE64SECRET);


 

原因分析

//io.JSONWEBtoken.impl.DefaultJwtBuilder#setExpiration 中代码    @Override    public JwtBuilder setExpiration(Date exp) {        if (exp != null) {            // 设置的时间不为空,就调用ensureClaims方法            ensureClaims().setExpiration(exp);        } else {            if (this.claims != null) {                //noinspection ConstantConditions                this.claims.setExpiration(exp);            }        }        return this;    }  // io.jsonwebtoken.impl.DefaultJwtBuilder#ensureClaims 中代码    protected Claims ensureClaims() {        // 如果claims为null, 则创建新的示例。 此处没有问题        if (this.claims == null) {            this.claims = new DefaultClaims();        }        return this.claims;    } // io.jsonwebtoken.impl.DefaultJwtBuilder#setClaims(io.jsonwebtoken.Claims) 中代码    @Override    public JwtBuilder setClaims(Claims claims) {        // 直接给claims赋值, 这里个操作覆盖了之前设置的超时时间,        // 导致最终构造token时, 没有设置超时时间        this.claims = claims;        return this;    }

JWT token过期自动续期解决方案

JWT

JWT全称JSON Web Token,由三部分组成header(头部,用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等)、payload(载荷,就是存放有效信息的地方,在这一部分中存放过期时间)和signature(签证,签证信息)。

token

token就是后端生成的JWT字符串值,在前后端分离中,token是前端访问后端接口的合法身份、权限的凭证。

token过期刷新方案

1、单点登录

用户登录,后端验证用户成功之后生成两个token,这两个token分别是access_token(访问接口使用的token)、refresh_token(access_token过期后用于刷续期的token,注意设置refresh_token的过期时间需比access_token的过期时间长),后端将用户信息和这两个token存放到redis中并返回给前端。

前端在获取到登录成功返回的两个token之后,将之存放到localStorage本地存储中。

2、接口请求

前端封装统一接口请求函数、token刷新函数,在请求成功之后对返回结果进行校验,如果token过期,则调用token刷新函数请求新的token.

后端在接收到token刷新请求之后通过结合Redis中存放的用户信息、token和refresh_token对请求参数进行验证,验证通过之后生成新的token和refresh_token存放到redis中并返回给前端。至此完成token刷新。

3、多请求应对

所谓多请求,就是指在短时间内同时发生多个请求,如果此时token已经过期,那么这些请求都会出现token过期请求失败的情况。

为了避免反复刷新token,需要设置一个刷新token的开关isRefresh,当一个请求出现token过期的时候,这个时候会调用token刷新函数,与此同时关闭开关将isRefresh的值设置为false,避免后续请求去调用token刷新函数。

当发现token过期时,咱们将请求延缓到token刷新之后再重新执行请求,这里采用Promise函数,把每一个token失效的请求都存到一个Promise函数集合里面,当token刷新之后打开开关将isRefresh的值设置为true,然后批量执行Promise函数集合里面的Promise函数,返回请求结果。

关于“JWT设置token过期时间无效怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JWT设置token过期时间无效怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: JWT设置token过期时间无效怎么解决

本文链接: https://lsjlt.com/news/343018.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JWT设置token过期时间无效怎么解决
    这篇文章主要介绍了JWT设置token过期时间无效怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JWT设置token过期时间无效怎么解决文章都会有所收获,下面我们一起来看看吧。JWT 设置token过期...
    99+
    2023-07-02
  • JWT设置token过期时间无效的解决
    目录JWT 设置token过期时间无效原因原因分析JWT token过期自动续期解决方案JWTtokentoken过期刷新方案JWT 设置token过期时间无效 原因 设置超时时间的...
    99+
    2024-04-02
  • 设置session过期时间不生效怎么解决
    如果设置session过期时间不生效,可能是由于以下原因:1. 服务器配置问题:检查服务器的session配置是否正确。确保sess...
    99+
    2023-08-17
    session
  • Springsecurity Oauth2如何设置token的过期时间
    1.设置token的过期时间 如果我们是从数据库来读取客户端信息的话 我们只需要在数据库设置token的过期时间 1.1 oauth_client_details表每个列的作...
    99+
    2024-04-02
  • redis怎么设置过期时间
    redis中的过期时间自动删除超过生命周期的键,可有效缓存短暂有效期的数据。设置过期时间有两种方法:1. expire命令,设置过期时间(秒);2. pexpire命令,设置过期时间(毫...
    99+
    2024-05-21
    redis
  • localStorage如何设置有效期和过期时间
    这篇文章将为大家详细讲解有关localStorage如何设置有效期和过期时间,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现思路在Storage原型上新增两个方法setCanExpireLocal,ge...
    99+
    2023-06-29
  • springboot整合jwt过期时间报错解决方法
    Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2021-12-20T10:09:10Z. Current time: 2023-...
    99+
    2023-09-14
    spring boot java intellij-idea Powered by 金山文档
  • Springboot2 session设置超时时间无效的解决
    问题: 今天项目中遇到了一个设置时间超时的问题,按SpringBoot2的application.properties更改一直不生效。 解决方案: server.*属性用于...
    99+
    2024-04-02
  • JavaScript中怎么设置Cookie过期时间
    这篇文章主要讲解了“JavaScript中怎么设置Cookie过期时间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中怎么设置Cooki...
    99+
    2024-04-02
  • Redis怎么批量设置过期时间
    这篇文章将为大家详细讲解有关Redis怎么批量设置过期时间,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis如何批量设置过期时间呢?不要说在foreach中通过set()函数批量设置过期时间我们引入...
    99+
    2023-06-21
  • Java怎么设置过期时间的map
    这篇文章给大家分享的是有关Java怎么设置过期时间的map的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、技术背景在实际的项目开发中,我们经常会使用到缓存中间件(如redis、MemCache等)来帮助我们提高...
    99+
    2023-06-29
  • asp中怎么设置session过期时间
    在ASP中,可以通过设置Session对象的Timeout属性来设置Session的过期时间。Timeout属性表示Session的...
    99+
    2023-08-18
    asp session
  • MySQL怎么设置数据过期时间
    MySQL本身不支持设置数据的过期时间,但可以通过以下方法实现类似的功能: 使用触发器:可以创建一个定时触发器,定期删除或更新过...
    99+
    2024-04-26
    MySQL
  • Redis怎么设置键的过期时间
    在Redis中,可以使用EXPIRE命令或者SET命令的EX参数来设置键的过期时间。 使用EXPIRE命令: EXPIRE key ...
    99+
    2024-05-07
    Redis
  • JS设置时间无效怎么办
    这篇文章主要为大家展示了“JS设置时间无效怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS设置时间无效怎么办”这篇文章吧。在发送短信息验证码的时候要用到...
    99+
    2024-04-02
  • Redis中怎么设置过期时间的Key
    Redis中怎么设置过期时间的Key,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、 DEL/SET/GETSET等命令会清除过期时间在使用...
    99+
    2024-04-02
  • Redis怎么设置生存和过期时间
    这篇“Redis怎么设置生存和过期时间”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Red...
    99+
    2024-04-02
  • redis怎么设置默认的过期时间
    在Redis中,可以使用`EXPIRE`命令设置键的过期时间。但是,如果你想要为所有键设置一个默认的过期时间,可以使用Redis的`...
    99+
    2023-09-06
    redis
  • redis注解设置缓存过期时间
    如何在使用 redis 注解时设置缓存过期时间?导入 redis 依赖项。使用 @cacheable 和 @cacheput 注解的 ttl 属性。ttl 属性指定缓存的过期时间,单位为...
    99+
    2024-04-19
    redis
  • Springboot2 session设置超时时间无效的解决方法
    本篇内容介绍了“Springboot2 session设置超时时间无效的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:今天项目...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作