与JWT的不解之缘

2023-05-16

jar : maven


<dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.6.0</version>
</dependency>  

 

java 代码实现


package com.zmt.payment.util;
import com.alibaba.druid.support.json.JSONUtils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.Key;
import java.util.Date;

/**
 * @CLASSNAME :JwtUtils
 * @Description :Tokens 生成工具
 * @Author :Mr.薛
 * @Data :2018/12/20 0020  15:44
 * @Version :V1.0
 * @Status : 编写
 **/
public class JwtUtils {
    /**
     * 解析JWT
     * @param jsonWebToken
     * @param base64Security
     * @return
     */
    public static Claims parseJWT(String jsonWebToken, String base64Security) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(DatatypeConverter.parseBase64Binary(base64Security))
                    .parseClaimsJws(jsonWebToken).getBody();
            return claims;
        } catch (Exception ex) {
            return null;
        }
    }

    /**
     * 创建JWT
     * @param no
     * @param userId
     * @param issuer
     * @param TTLMillis
     * @param base64Security
     * @return
     */
    /*token的过期时间用秒来计算*/
    public static String createJWT(String no, String userId,String issuer, long TTLMillis, String base64Security) {
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        long nowMillis = System.currentTimeMillis();
        Date now = new Date(nowMillis);
        //生成签名密钥
        byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(base64Security);
        Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
        //添加构成JWT的参数
       /* Payload
        Payload 里面是 Token 的具体内容,这些内容里面有一些是标准字段,你也可以添加其它需要的内容。下面是标准字段:
        iss:Issuer,发行者
        sub:Subject,主题
        aud:Audience,观众
        exp:Expiration time,过期时间
        nbf:Not before
        iat:Issued at,发行时间
        jti:JWT ID
        比如下面这个 Payload ,用到了 iss 发行人,还有 exp 过期时间这两个标准字段。另外还有两个自定义的字段,一个是 name ,还有一个是 admin 。
        {
            "iss": "ninghao.net",
                "exp": "1438955445",
                "name": "wanghao",
                "admin": true
        }*/
        JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")
                .claim("no", no)
                .setSubject(userId)
                .setIssuer(issuer)
                .signWith(signatureAlgorithm, signingKey);
        //添加Token过期时间
        if (TTLMillis >= 0) {
            long expMillis = nowMillis + TTLMillis;
            Date exp = new Date(expMillis);
            builder.setExpiration(exp).setNotBefore(now);
        }
        //生成JWT
        return builder.compact();
    }


    public static void main(String[] args) {
        /*测试数据*/
        long time = 180;/*过期时间3分钟*/
        System.out.println(System.currentTimeMillis());
        String auth = createJWT(time+"s","userId","issuer",time,"base64Security");
        System.out.println("auth:"+auth);
        Claims m = parseJWT(auth,"base64Security");
        System.out.println(JSONUtils.toJSONString(m));
    }

}
  

 

在数据的验证这里如果是http接口的话最好通过头文件讲token绑定,作为数据传输的第一步验证,接口类数据的过期时间最好不要超过1分钟,用户登录的过期时间同步授权时间,用户注销之后释放token

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与JWT的不解之缘 的相关文章

随机推荐

  • docker参数详解

    1 xff1a docker参数详解 docker useage of docker D 默认false 允许调试模式 debugmode H 默认是unix var run docker sock tcp host port 来绑定 或者
  • 【星伦商学院】中小企业经济复苏公益座谈会圆满结束

    中小企业经济复苏公益座谈会 为帮助中小微企业破解难题 渡过难关 xff0c 全面推进复工复产 xff0c 6月30日 xff0c 中小企业座谈会 xff08 以下简称会议 xff09 在中国 浙江诸暨市召开 力求创新举措破解制约中小微企业用
  • 从旋转矩阵到欧拉角

    摄影测量中 xff0c R转角系统一般是以y轴为主轴 xff0c 但是在很多代码中 xff0c 发现R的定义很多 xff0c 据自己需求 工业标准中一般采用Z X Y转角系统 xff0c 先绕x旋转 xff0c 再绕y 最后是Z 即如下所示
  • Git只clone指定的分支

    默认的clone会下载远程仓库的所有分支 有时候为了避免创建多个git仓库 xff0c 想将一些资源在一个git仓库下统一管理 xff0c 这时候就会出现 xff1a git远程仓库分支很多 xff0c 但是各个分支没有多大关联 xff0c
  • Ubuntu系统无法update的解决方法

    今天安装Ubuntu系统的时候 xff0c 出现了一些状况 xff0c 首先说个自己犯的幼稚错误 首先我制作好了启动盘 xff0c 并且按着步骤安装完系统 进入系统 xff0c 我自认为输入了密码 xff0c 进入了我的账号 xff08 其
  • 什么是嵌入式AI开发?人工智能芯片指什么?STM32、树莓派、Jetson TX2、华为昇腾部署神经网络区别在哪?

    嵌入式芯片 xff1a https zhuanlan zhihu com p 449570075 芯片公司代表 xff1a https www jiqizhixin com articles 2020 01 31 9 相较于CPU GPU等
  • RK3308--固件编译

    快捷路径 相关路径 xff1a cd work hxy RK3308 sdk 1 5 添加依赖包 若编译遇到报错 xff0c 可以视报错信息 xff0c 安装对应的软件包 当时下面一大段依赖包直接添加时 xff0c 不能实现 可能是因为中间
  • ChatGPT会如何影响我们的工作生活和人力资源需求

    ChatGPT xff0c 这几天体验了一下 xff0c 确实是非常震撼 一方面是因为它的回答确实相当好 xff0c 自带一点框架逻辑 xff0c 有上下文理解能力 xff0c 可以追问 xff0c 有情商 虽然很多时候都是一些正确的废话
  • Linux设备驱动思想在STM32编程中的应用

    这几天看了一下Linux设备驱动 xff0c 发现这套思想其实也可以用在普通的单片机编程上 这种思想较好的分割了驱动层和应用层的任务 xff0c 方便分层开发 以前 xff0c 我们开发STM32驱动的时候 xff0c 会给设备写一套函数来
  • 36.【linux驱动】spi framebuffer驱动(切换并显示虚拟终端)

    1 framebuffer驱动 2 spi framebuffer驱动 3 spi framebuffer驱动 切换并显示虚拟终端 切换终端输出 接这上一节 spi framebuffer驱动实现了 xff0c 但是只有刷屏 6个虚拟终端并
  • ubuntu 移除PPA

    ubuntu 移除PPA 问题描述解决方案1 移除PPA源2 移除key3 查看那些包被替换4 从官方源下载包并替换5 测试是否替换成功 总结反思 问题描述 试图在ubuntu 20 04上安装Phalcon框架 xff0c 但是发现版本不
  • django内置的密码加密与解密

    Django 内置的User类提供了用户密码的存储 验证 修改等功能 xff0c 默认使用pbkdf2 sha256方式来存储和管理用的密码 django通过PASSWORD HASHERS来设置选择要使用的算法 xff0c 列表的第一个元
  • TF坐标变换的学习

    官方教程 xff1a http wiki ros org tf ROS中的很多软件包都需要机器人发布tf变换树 xff0c 那么什么是tf变换树呢 xff1f 抽象的来讲 xff0c 一棵tf变换树定义了不同坐标系之间的平移与旋转变换关系
  • Docker 服务端口一览

    最近研究微服务 xff0c 使用Docker来进行部署应用 说实话docker是个好东西 xff0c 只要编写好Dockerfile文件和docker compose yml文件 xff0c 便能快速启动并运行相关服务 调试过程中查看服务可
  • 鱼眼镜头的成像原理到畸变矫正(完整版)

    最近刚接触鱼眼相机 xff0c 发现网上资料还是比较零散的 xff0c 于是把搜罗到的资料汇总梳理了一下 这里推荐大家直接看链接6的论文 xff0c 从成像模型到畸变矫正整个过程讲的比较清楚 xff0c 网上很多版本其实都是根据这两篇论文来
  • STM32通过广和通ADP-L610-Arduino进行TCP/IP通信

    STM32通过广和通L610进行TCP IP通信 一 写在前面 本次参加嵌入式大赛 xff0c 使用了广和通的ADP L610 Arduino板子进行通信 项目要求大概是本地上传数据到服务器 xff0c 服务器接收后发送给客户端 xff0c
  • Visual Studio Code Git版本控制 更改语言成英文

    一 初始化git库 新版vscode只能打开一个文件夹 xff0c 当你打开这个文件夹后 xff0c 再点击左边的git控制按钮 xff0c 就会初始化该文件夹为git工作目录 xff0c 如果已经有git控制 xff0c 则不会改变 在v
  • STM8S003F3 开发环境搭建

    硬件相关 芯片介绍 型号 xff1a STM8S003F3P6 xff0c 用的不是ARM内核 STM32用的是ARM xff0c 而是意法半导体自己生产的高性能8位内核 xff1a STM8AF 主要针对汽车电子应用 xff0c 如 xf
  • 教你写Makefile(很全,含有工作经验的)

    原文 转载文 Makefile 值得一提的是 xff0c 在Makefile中的命令 xff0c 必须要以 Tab 键开始 什么是makefile xff1f 或许很多Winodws的程序员都不知道这个东西 xff0c 因为那些Window
  • 与JWT的不解之缘

    jar xff1a maven lt dependency gt lt groupId gt io jsonwebtoken lt groupId gt lt artifactId gt jjwt lt artifactId gt lt v