码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JWT主动校验Token是否过期


    JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP 协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个 request 请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁,就要再验证一次。所以为了保证系统安全,我们就需要验证用户否处于登录状态。

    JWT 组成

    JWT 由三部分组成:Header,Payload,Signature 三个部分组成,并且最后由.拼接而成。

    JWT 校验原理

    通过前面讲解的 jwt 生成规则,jwt 前两部分是对 header 以及 payload 的 base64 编码。 当服务器收到客户端的 token 后,解析前两部分得到 header 以及 payload,并使用 header 中的算法与服务端本地私有 secret 进行签名,判断与 jwt 中携带的签名是否一致。

    主动校验是否过期

    在一些表单提交的业务场景会去校验Token是否有效,如果此时token已过期,那么前端会提示用户重新登录。如开源字节租房小程序提交房源的场景就是如此。该操作模式会导致用户输入的数据丢失,造成用户体验很糟糕,因此在租房小程序中我们实现了主动校验token的功能,在我们打开表单的同时就去校验token,此时用户并没有输入任何数据。通过此方式改善了用户的体验。

    /**
     * 验证令牌是否过期
     */
    public boolean isExpiration(String token) {
    		try {
    				Claims claims = parseToken(token);
    				String userKey = getTokenKey(claims.get(Constants.LOGIN_USER_KEY).toString());
    				LoginUser loginUser = redisCache.getCacheObject(userKey);
    				long expireTime = loginUser.getExpireTime();
    				long currentTime = System.currentTimeMillis();
    				if (expireTime - currentTime <= 0)
    				{
    						return true;
    				}
    		} catch (Exception e) {
    				return true;
    		}
    		return false;
    }
    
    /**
     * 从令牌中获取数据声明
     *
     * @param token 令牌
     * @return 数据声明
     */
    private Claims parseToken(String token)
    {
    		return Jwts.parser()
    			   .setSigningKey(secret)
    			   .parseClaimsJws(token)
    			   .getBody();
    }
    

    以上分享内容在开源字节低代码平台中可免费获取,前往围观

    如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/212.html

  • 相关阅读:
    Ap01- 自适应 AutoSAR概述和简介
    【MySQL】基本查询(表的增删改查)-- 详解
    【推荐】区块链技术及行业应用资料合集
    BUUCTF-MISC-[GUET-CTF2019]soul sipse1
    .NET周报【11月第4期 2022-11-30】
    【重拾C语言】五、模块化程序设计——函数(定义、调用、参数传递、结果返回、函数原型;典例:打印字符图形、验证哥德巴赫猜想)
    【手撕STL】bitset(位图)、布隆过滤器
    PC-3000 Mobile Pro: 智能手机及平板设备数据提取工具
    人脸识别与神经风格转换
    ImmunoChemistry艾美捷抗体涂层缓冲液解决方案
  • 原文地址:https://blog.csdn.net/qq_35634154/article/details/126163440
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号