在这篇文章中主要记录一下在Java中如何使用 java 代码生成jwt token,主要是使用jjwt来生成和验证jwt,关于什么是JWT,以及JWT可以干什么不做详解。

jwt的格式: base64(header).base64(payload).加密算法(base64(header)+“.”+base64(payload),"私钥")

在Java中使用JWT

一、引入jjwt的jar包

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

 二、生成JWT token

// 私钥
private static final String SECRET_KEY = "this is a secret key"; public static void main(String[] args) {
// 生成token
String jwtToken = Jwts.builder()
// 头部
.setHeaderParam("typ", "JWT") // jwt 标注中的申明
.setIssuedAt(new Date()) // 签发时间
.setExpiration(new Date(new Date().getTime() + 10000L))// 过期时间
.setSubject("19930311")// jwt面向的客户
.setIssuer("huan")// jwt的签发者 // 公共申明和私有申明
.claim("user_id", "admin")
.claim("phone", "18251421000")
.claim("age", 25)
.claim("sex", "男") // 签证
.signWith(SignatureAlgorithm.HS256, SECRET_KEY.getBytes()) .compact(); System.out.println("生成的 jwt token 如下:" + jwtToken);
}

三、验证jwt token

// 验证jwt
Jws<Claims> claimsJws = Jwts.parser()
// 验证签发者字段iss 必须是 huan
.require("iss", "huan")
// 设置私钥
.setSigningKey(SECRET_KEY.getBytes())
// 解析jwt字符串
.parseClaimsJws(jwtToken); // 获取头部信息
JwsHeader header = claimsJws.getHeader();
// 获取载荷信息
Claims payload = claimsJws.getBody(); System.out.println("解析过来的jwt的header如下:" + header.toString());
System.out.println("解析过来的jwt的payload如下:" + payload.toString());

上面jwtToken的值为第二步生成的jwt token的值

:1、.require("iss","haun") 表示jwt中的iss字段的值必须是huan

2、验证jwt的秘钥和生成jwt的秘钥必须是同一个。

四、结果

java中生成和验证jwt的更多相关文章

  1. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  2. 在java中生成二维码,并直接输出到jsp页面

    在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...

  3. JAVA中生成、解析二维码图片的方法

    JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...

  4. java中生成验证码,以及验证码的使用

    java中生成验证码,以及验证码的使用: 1:验证码生成工具类: import java.awt.Color; import java.awt.Font; import java.awt.Graphi ...

  5. 【学习笔记】Java中生成对象的5中方法

    概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...

  6. Java中的参数验证(非Spring版)

    1. Java中的参数验证(非Spring版) 1.1. 前言 为什么我总遇到这种非正常问题,我们知道很多时候我们的参数校验都是放在controller层的传入参数进行校验,我们常用的校验方式就是引入 ...

  7. JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...

  8. Java中的数据验证

    原文链接:https://www.cuba-platform.com/blog/2018-10-09/945 翻译:CUBA China CUBA-Platform 官网 : https://www. ...

  9. Java中生成帮助文档

    如何在Java中使用注释 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 以上.因此,注释是程序源代码的重要组成部分 ...

随机推荐

  1. 解析Prometheus PromQL

    解析PromQL 目前对Prometheus 的promQL 的解析文章比较少,且Prometheus官方也没有提供一个公共的库来对齐进行解析.下面实现对promQL的解析,并实现注入label功能. ...

  2. 详解C3P0(数据库连接池)

    详解C3P0(数据库连接池) 快速索引 一.基本定义 二.使用C3P0(数据库连接池)的必要性 1.JDBC传统模式开发存在的主要问题 三.数据库连接池的详细说明 四.使用连接池的明显优势 1.资源的 ...

  3. CodeForce-811C Vladik and Memorable Trip(动态规划)

    Vladik and Memorable Trip CodeForces - 811C 有一个长度为 n 的数列,其中第 i 项为 ai. 现在需要你从这个数列中选出一些互不相交的区间,并且保证整个数 ...

  4. CSP-J 2021 游记

    今年是本人第一次参加CSP组的竞赛. Day 0 晚上复习了几套初赛试卷,做到晚上十点多结束.其实暑假已经做过不少了. Day 1 早上继续复习noip历年真题,在洛谷有题上面自己做题,一向只能考十几 ...

  5. seo执行步骤

    第一个金字塔策略这个很适用于大型网站,我想做过大型网站,特别是关键词比较多比较杂乱的站长来说,这个图太熟悉不过了,就算是没有见过,但实际操作中早就用到了这些手法.如果能把这个图领会透并实际应用,做一个 ...

  6. python 深度学习 库文件安装出错汇总

    Cython_bbox FairMOT | win10下cython-bbox安装的心酸之路_是阳阳呀的博客-CSDN博客 swig 安装polyiou.py https://blog.csdn.ne ...

  7. [手机编程]Aid Learning--换源+数据库安装

    换源+MYSQL安装 Aid Learning下载安装 http://www.aidlearning.net/ 切换源 打开Terminal复制回车即可 cd /etc/apt/&& ...

  8. javascript 标签切换

    * index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  9. Java学习之随堂笔记系列——day02

    昨天内容回顾1.安装jdk和配置环境变量 配置JAVA_HOME和path,只要配置成功之后就可以直接使用java和javac命令.2.HelloWorld案例3.java的基础语法 注释:给程序的解 ...

  10. python之jsonpath

    json 官方文档:http://docs.python.org/library/json.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使 ...