JWT-Token升级方案

news2024/11/16 23:48:48

1. 介绍

在这里插入图片描述
JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT最重要的作用就是对 token信息的防伪作用。

2. 官网地址

https://jwt.io/
JWT令牌的组成:
 一个JWT由三个部分组成:JWT头、有效载荷、签名哈希
 最后由这三者组合进行base64url编码得到JWT
典型的,一个JWT看起来如下图:该对象为一个很长的字符串,字符之间通过"."分隔符分为三个子串。

在这里插入图片描述
在这里插入图片描述

3. 特点

 JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。
 JWT 不加密的情况下,不能将秘密数据写入 JWT。
 JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。
 JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
 JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
 为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。

4. 生成token的方案比较

在这里插入图片描述

5. pom.xml

<!-- 集成jwt,升级token解决方案 -->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>4.0.0</version>
        </dependency>

6. JwtHelper.java

package com.bank.admin.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

/**
 * @version v1.0 创建时间:19:40
 * @author: 作者:陈子枢
 * @web CSDN:https://blog.csdn.net/nutony
 * @description 描述:auth0.jwt 工具类
 */
public class JwtHelper {
    //过期时间,通常30分钟~1小时
    private static long EXPIRE_DATE = 1*60*60*1000;
    private static String TOKEN_SECRET = "chenchen";    //秘钥

    //创建token,含有userId和userName信息
    public static String createToken(String userId, String userName){
        Date expiredTime = new Date(System.currentTimeMillis()+EXPIRE_DATE);
        Algorithm alg = Algorithm.HMAC256(TOKEN_SECRET);
        try{
            String token = JWT.create()
                .withClaim("userId", userId)
                .withClaim("userName", userName)
                .withExpiresAt(expiredTime)
                .sign(alg);
            return token;
        }catch (Exception e){
            return null;
        }
    }

    //获取token中隐藏的信息
    public static String get(String token, String who){
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim(who).asString();
    }

    //校验token是否过期
    public static boolean verify(String token){
        DecodedJWT jwt = JWT.decode(token);
        if( jwt.getExpiresAt().before(new Date())) {
            //System.out.println("token is expired");
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        String t = JwtHelper.createToken("1", "130");
        System.out.println(t);
        String k = JwtHelper.get(t, "userName");
        System.out.println(k);

        //刚生成立马测试,返回true
        //boolean b = JwtHelper.verify(t);

        //超过时间测试,返回false
        boolean b = JwtHelper.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6IjEzMCIsImV4cCI6MTY5NDA4OTM4OCwidXNlcklkIjoiMSJ9.N30GNN2LuEPx6KgqStkvm2MXiC--Y3UAAyISG26NcjA");
        System.out.println(b);

    }
}

7. token

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATFX汇市:美联储褐皮书透露就业市场新动向,美元指数中期多头趋势延续

ATFX汇市&#xff1a;今日2:00&#xff0c;美联储发布褐皮书&#xff0c;关于就业市场&#xff0c;其中提到&#xff1a;全国就业增长乏力&#xff0c;大多数地区的劳动力成本压力增长加剧&#xff0c;企业预计工资增长将在短期内普遍放缓。从7月、8月的非农就业报告当中&#…

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中&#xff0c;数组A[]中的元素与[0,n)内的编号一一对应&#xff0c;A[0],A[1],...,A[n-1]&#xff1b;反之&#xff0c;每个元素均由&#xff08;非负&#xff09;编号唯一指代&#xff0c;并可直接访问A[i] 的物理地址 Ai s&#xff0c;s 为单…

vue-elementPlus自动按需导入和主题定制

elementPlus自动按需导入 装包 -> 配置 1. 装包&#xff08;主包和两个插件包&#xff09; $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置&#xff0c;配置完重启&#xff08;n…

SM5202 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器

简介&#xff1a; SM5202 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器&#xff0c;并带有锂电池正负极反接保护功能&#xff0c;可以保护芯片和用户安全。由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0c;所以不需要外部检测电阻和隔离二极管…

Java之包装类的算法小题的练习

算法小题 练习一&#xff1a; 需求&#xff1a; 键盘录入一些1~10日之间的整数&#xff0c;并添加到集合中。直到集合中所有数据和超过200为止。 代码示例&#xff1a; public class Test1 {public static void main(String[] args) {/*键盘录入一些1~10日之间的整数&…

产业大数据应用:洞察区域产业实况,把握区域经济脉搏

​ 随着新一代信息技术的崛起&#xff0c;我们进入了大数据时代。在这个时代&#xff0c;数据作为基本生产要素不仅改变着我们的日常生活&#xff0c;更是在区域产业经济发展中扮演着重要角色&#xff0c;它赋予了政府、企业和投资者敏锐的洞察力。 一、摸清区域经济现状 基于…

智慧公厕如何实现系统管理、运行数据、业务流程的高度耦合

随着城市发展和人口增长&#xff0c;公共厕所成为城市更新与发展的重要环节。然而&#xff0c;传统的公共厕所管理方式面临诸多问题&#xff0c;如运营成本高、环境污染、人员管理等。为了解决这些问题&#xff0c;智慧公厕应运而生。智慧公厕是指利用现代科技手段&#xff0c;…

RPC接口测试-两种方法(Jmeter和代码)

相信很多同学在测试RPC接口时会遇到很多困难&#xff0c;博主前段时间在测试时也一样&#xff0c;算是提前踩坑啦&#xff0c;下面就来介绍一下测试RPC接口的方法 1.什么是RPC接口 RPC&#xff08;Remote Procedure Call&#xff09;是一种通信协议和模式&#xff0c;用于在分…

Linux之权限

目录 一、shell运行原理 二、权限 1、对人操作 2、对角色和文件操作 修改权限&#xff08;改属性&#xff09;&#xff1a; ①ugo- ②二进制数的表示 修改权限&#xff08;改人&#xff09;&#xff1a; 三、权限的相关问题 1、目录的权限 2、umask 3、粘滞位 一、s…

一百七十一、Flume——Flume1.9.0单机版安装(亲测有效)

一、目的 以防万一&#xff0c;为了避免kettle从Kafka同步数据到HDFS有问题&#xff0c;因此也测试了用Flume去采集Kafka中的数据然后同步到HDFS&#xff0c;算是一套备用方案 二、安装包版本 &#xff08;一&#xff09;Hadoop版本 hadoop-3.1.3.tar.gz &#xff08;二&a…

JS中执行上下文和执行栈是什么?

一&#xff1a;执行上下文 执行上下文是一种对js执行代码的环境的一种抽象&#xff0c;只要js在执行中&#xff0c;那它一定是运行在执行上下文中 执行上下文的类型 全局执行上下文&#xff1a;全局执行上下文是在程序启动时创建的&#xff0c;它包含全局范围定义的变量和函数…

UltraISO做u盘镜像启动盘

1、工具—刻录光盘映像 2、刻录机选择盘 选择centos镜像 刻录

索尼 toio™应用创意开发征文|一步两步三步模拟浇花系统

目录 1.toio™介绍 2、创意分析 2.1 创意设计 2.2 创意落地 3、创意实现 3.1 环境安装 3.2 核心玩法 总结 1.toio™介绍 索尼的toio™是一款启发创意的机器人产品&#xff0c;旨在通过与真实世界的互动&#xff0c;为各年龄段的用户提供娱乐体验。这款产品具有高度的灵…

【已解决】pyqt5的打包exe软件图标菜单栏/任务栏/小图标/窗口图标未显示

1.起因&#xff1a; 希望&#xff1a;pyqt5 项目&#xff0c;pyinstaller main.spec 打包&#xff0c;我想要 main.exe 就像一个普通的应用软件一样显示我自定义的图标。 结果&#xff1a; main.exe 左侧图标还是老土的样子&#xff0c;并没有成为我的图标。独立运行是&#…

API接口与电商平台之间的联系,采集京东平台数据按关键字搜索商品接口示例

关键字搜索商品的重要性&#xff1a; 1.引入精准流量 关键词第一个也是最重要的作用就是为我们宝贝引进精准的流量&#xff0c;这一作用无论是在自然搜索中还是直通车中都是一样的。 第一步关乎的是我们宝贝的展现&#xff0c;而第二步用户是否会点进我们的宝贝&#xff0c;…

爬虫爬取mp3文件例子

相信训练模型时数据集的获取也是一个很头疼的事情&#xff0c;搞cv领域的可以扛着摄像头架起三脚架拍摄获取&#xff08;以前干过&#xff09;&#xff0c;但是如果是nlp领域的呢&#xff0c;特别是chatgpt等大模型出来后对这类文本等数据的需求更大&#xff0c;如果没有现成的…

攻防世界-WEB-Web_php_include

打开靶机 通过代码审计可以知道&#xff0c;存在文件包含漏洞&#xff0c;并且对伪协议php://进行了过滤。 发现根目录下存在phpinfo 观察phpinfo发现如下&#xff1a; 这两个都为on 所以我们就可以使用data://伪协议 payload如下&#xff1a; - ?pagedata://text/plain,…

测试可用的淘宝API(商品详情数据、买家信息、卖家信息、店铺信息、订单信息)

什么是API? API全称Application Programming Interface&#xff0c;即应用程序编程接口&#xff0c;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定&#xff0c;用于传输数据和指令&#xff0c;使应用程序之间可以集成和共享数据资源。 简单来说&#…

SQL语言的分类:DDL(数据库、表的增、删、改)、DML(数据的增、删、改)

数据库管理系统&#xff08;数据库软件&#xff09;功能非常多&#xff0c;不仅仅是存储数据&#xff0c;还要包含&#xff1a;数据的管理、表的管理、库的管理、账户管理、权限管理等。 操作数据库的SQL语言&#xff0c;基于功能&#xff0c;划分为4类&#xff1a; 1、数据定…

64位Office API声明语句第110讲

【分享成果&#xff0c;随喜正能量】以大慈为所住&#xff0c;给一切众生快乐&#xff0c;观众生心与菩萨心平等平等。以大悲为住处&#xff0c;不轻末学&#xff0c;善根成熟了他会发心&#xff0c;将来也能成佛。舍有为而不执著无为&#xff0c;住无为而不舍有为&#xff0c;…