广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JWT设置token过期时间无效的解决
  • 528
分享到

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

2024-04-02 19:04:59 528人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录Jwt 设置token过期时间无效原因原因分析JWT token过期自动续期解决方案JWTtokentoken过期刷新方案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函数,返回请求结果。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JWT设置token过期时间无效的解决
    目录JWT 设置token过期时间无效原因原因分析JWT token过期自动续期解决方案JWTtokentoken过期刷新方案JWT 设置token过期时间无效 原因 设置超时时间的...
    99+
    2022-11-13
  • JWT设置token过期时间无效怎么解决
    这篇文章主要介绍了JWT设置token过期时间无效怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JWT设置token过期时间无效怎么解决文章都会有所收获,下面我们一起来看看吧。JWT 设置token过期...
    99+
    2023-07-02
  • Springsecurity Oauth2如何设置token的过期时间
    1.设置token的过期时间 如果我们是从数据库来读取客户端信息的话 我们只需要在数据库设置token的过期时间 1.1 oauth_client_details表每个列的作...
    99+
    2022-11-12
  • 设置session过期时间不生效怎么解决
    如果设置session过期时间不生效,可能是由于以下原因:1. 服务器配置问题:检查服务器的session配置是否正确。确保sess...
    99+
    2023-08-17
    session
  • Springboot2 session设置超时时间无效的解决
    问题: 今天项目中遇到了一个设置时间超时的问题,按SpringBoot2的application.properties更改一直不生效。 解决方案: server.*属性用于...
    99+
    2022-11-12
  • 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 金山文档
  • localStorage如何设置有效期和过期时间
    这篇文章将为大家详细讲解有关localStorage如何设置有效期和过期时间,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现思路在Storage原型上新增两个方法setCanExpireLocal,ge...
    99+
    2023-06-29
  • Springboot2 session设置超时时间无效的解决方法
    本篇内容介绍了“Springboot2 session设置超时时间无效的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:今天项目...
    99+
    2023-06-20
  • localStorage设置有效期和过期时间的简单方法
    目录前言实现思路实现代码总结前言 总所周知localStorage默认是不会过期的,也没有可设置过期的api,如果要实现过期清除就需要自己实现一个api 实现思路 在Storage原...
    99+
    2022-11-13
  • Redis设置key的过期时间
    Redis中可以设置数据的过期时间,一旦过期自动删除数据。 1.设置过期时间 expire 127.0.0.1:6379> set name "ok" //设置10s后过期,e...
    99+
    2023-01-28
    Redis设置key过期时间 Redis key过期时间
  • 如何设置localStorage的过期时间
    这期内容当中小编将会给大家带来有关如何设置localStorage的过期时间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<script type="text/javascrip...
    99+
    2023-06-09
  • Java怎么设置过期时间的map
    这篇文章给大家分享的是有关Java怎么设置过期时间的map的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、技术背景在实际的项目开发中,我们经常会使用到缓存中间件(如redis、MemCache等)来帮助我们提高...
    99+
    2023-06-29
  • Redis 过期键的设置、获取和删除过期时间
    Redis 过期键的设置、获取和删除过期时间 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内存。 设置的键的生存时间也很容易,可以通过4个命令设置(任选一即可):EXPIRE、PEXP...
    99+
    2022-10-18
  • 浅谈redis的过期时间设置和过期删除机制
    目录一:设置过期时间二:保存过期时间三:移除过期时间四:计算并返回剩余生存时间五:过期键的删除策略六:redis使用的策略一:设置过期时间 redis有四种命令可以用于设置键的生存时...
    99+
    2022-11-13
  • 如何设置合适的redis过期时间
    这篇文章运用简单易懂的例子给大家介绍如何设置合适的redis过期时间,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。          ...
    99+
    2022-10-18
  • Redis中怎么设置过期时间的Key
    Redis中怎么设置过期时间的Key,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、 DEL/SET/GETSET等命令会清除过期时间在使用...
    99+
    2022-10-18
  • localStorage过期时间设置的几种方法
    目录问题描述 1. 初级解法 2. 中级解法 3. 高级解法 4. 骨灰级解法 聊到 localStorage 想必熟悉前端的朋友都不会陌生, 我们可以使用它提供的 getItem,...
    99+
    2022-11-12
  • redis怎么设置默认的过期时间
    在Redis中,可以使用`EXPIRE`命令设置键的过期时间。但是,如果你想要为所有键设置一个默认的过期时间,可以使用Redis的`...
    99+
    2023-09-06
    redis
  • PHP如何将cookie的过期时间设置为过去
    这篇文章主要介绍了PHP如何将cookie的过期时间设置为过去,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。将cookie的过期时间设置为过去<phpsetcookie...
    99+
    2023-06-17
  • 怎么在redis中设置key的过期时间
    在redis中设置key过期时间的方法:1.启动redis服务;2.登录redis数据库;3.执行命令设置过期时间;具体步骤如下:首先,在命令行中启动redis服务;service redis start mysql服务启动后,输入用户名,...
    99+
    2022-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作