1什么是JJWT

JJWT 是一个提供端到端的 JWT 创建和验证的 Java 库。永远免费和开源 (Apache License,版本2.0),JJWT 很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。

2JJWT快速入门

2.1token的创建

2.1.1maven引入依赖

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

2.1.2 创建 CreateJWT 类,用于生成 token

public class CreateJWT {public static void main(String[] args) {JwtBuilder jwtBuilder = Jwts.builder().setId("666777").setSubject("脑浆消融").setIssuedAt(new Date()).signWith(SignatureAlgorithm.HS256, "HelloWorld");System.out.println(jwtBuilder.compact());}
}
复制代码
  • setIssuedAt:用于设置签发时间
  • signWith:用于设置签名秘钥

2.1.3 测试

第一次:

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjY3NzciLCJzdWIiOiLohJHmtYbmtojono0iLCJpYXQiOjE2MDg4MDY3MDd9.v1SRR_xChK-K_T5GuHObQy5BnCOyZgGxBX-vrqBWwZg

再次运行,会发现每次运行的结果是不一样的,因为我们的载荷中包含了时间:

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjY3NzciLCJzdWIiOiLohJHmtYbmtojono0iLCJpYXQiOjE2MDg4MDY3ODV9.Da6HfKuSowFkWKmazLzFQSvkWzMPYNCEuNu12Q7e8mM

2.2 token 的解析

我们刚才已经创建了 token ,在 web 应用中这个操作是由服务端进行然后发给客户端,客户端在下次向服务端发送请求时需要携带这个 token(这就好像是拿着一张门票一样),那服务端接到这个 token 应该解析出 token 中的信息(例如用户 id),根据这些信息查询数据库返回相应的结果。

public class ParserJwtTest {public static void main(String[] args) {Claims claims = Jwts.parser().setSigningKey("HelloWorld").parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjY3NzciLCJzdWIiOiLohJHmtYbmtojono0iLCJpYXQiOjE2MDg4MDY3ODV9.Da6HfKuSowFkWKmazLzFQSvkWzMPYNCEuNu12Q7e8mM").getBody();System.out.println("用户ID:" + claims.getId());System.out.println("用户名:" + claims.getSubject());System.out.println("登陆时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));}
}

试着将 token 或签名秘钥篡改一下,会发现运行时就会报错,所以解析 token 也就是验证 token。

例如,把 token 末尾的 mM 删除掉,就会报错:

2.3 token 过期校验

有很多时候,我们并不希望签发的 token 是永久生效的,所以我们可以为 token 添加一个过期时间。

public class CreateJWT {public static void main(String[] args) {JwtBuilder jwtBuilder = Jwts.builder().setId("666777").setSubject("脑浆消融").setIssuedAt(new Date()).signWith(SignatureAlgorithm.HS256, "HelloWorld").setExpiration(new Date(new Date().getTime() + 60000));System.out.println(jwtBuilder.compact());}
}
复制代码
  • setExpiration 方法:用于设置过期时间。

我们修改 Jwt 解析类,多添加一个过期时间:

public class ParserJwtTest {public static void main(String[] args) {Claims claims = Jwts.parser().setSigningKey("HelloWorld").parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjY3NzciLCJzdWIiOiLohJHmtYbmtojono0iLCJpYXQiOjE2MDg4MDk3NzksImV4cCI6MTYwODgwOTgzOX0.kAroSbh6Q5PzoA0iUxNtlpBVipvA6Zb2O3OcEFJkF88").getBody();System.out.println("用户ID:" + claims.getId());System.out.println("用户名:" + claims.getSubject());System.out.println("登陆时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));System.out.println("过期时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration()));}
}

1 分钟之内,token 可以使用:

1 分钟之后,过期时会引发 io.jsonwebtoken.ExpiredJwtException 异常:

2.4 自定义 claims

我们刚才的例子只是存储了 id 和 subject 两个信息,如果你想存储更多的信息(例如角色)可以自定义 claims。

多添加两个 claims:

public class CreateJWT {public static void main(String[] args) {JwtBuilder jwtBuilder = Jwts.builder().setId("666777").setSubject("脑浆消融").setIssuedAt(new Date()).signWith(SignatureAlgorithm.HS256, "HelloWorld").setExpiration(new Date(new Date().getTime() + 60000)).claim("sex", "man").claim("age", "25");System.out.println(jwtBuilder.compact());}
}

Jwt 解析类,打印出性别和年龄:

public class ParserJwtTest {public static void main(String[] args) {Claims claims = Jwts.parser().setSigningKey("HelloWorld").parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjY3NzciLCJzdWIiOiLohJHmtYbmtojono0iLCJpYXQiOjE2MDg4MDk3NzksImV4cCI6MTYwODgwOTgzOX0.kAroSbh6Q5PzoA0iUxNtlpBVipvA6Zb2O3OcEFJkF88").getBody();System.out.println("用户ID:" + claims.getId());System.out.println("用户名:" + claims.getSubject());System.out.println("登陆时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));System.out.println("过期时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration()));System.out.println("性别:" + claims.get("sex"));System.out.println("年龄:" + claims.get("age"));}
}

结果:

JJWT 实现JWT相关推荐

  1. Java笔记-使用jjwt生成jwt

    jwt的全称为: JSON WEB TOKEN 程序运行截图如下: maven添加: <dependency><groupId>io.jsonwebtoken</grou ...

  2. JJWT 实现 JWT

    什么是JJWT: JJWT 是一个提供端到端的JWT创建和验证的Java库.永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解. JJWT快速入门 1. 在 meng ...

  3. jjwt生成jwt token

    JJWT生成token jjwt 0.9.0版本 jjwt0.11.2版本 版本区别 第一个问题 第二个问题 第三个问题 最近在一个项目中不经意间升级了jjwt的版本(0.9.0升级到0.11.2), ...

  4. Java用JJWT实现JWT

    JWT编码分为三部分,前两部分是base64编码,第三段是加密字符串. Maven <dependency><groupId>io.jsonwebtoken</group ...

  5. 【编码实战】2022年还在用jjwt操作jwt?,推荐你使用nimbus-jose-jwt,爽到飞起~

    什么是nimbus-jose-jwt? nimbus-jose-jwt是基于Apache2.0开源协议的JWT开源库,支持所有的签名(JWS)和加密(JWE)算法. 对于JWT.JWS.JWE介绍 J ...

  6. 使用JJWT实现JWT代码示例

  7. JWT的学习和JJWT的使用

    1.什么是JWT JWT(JSON Web Token)是一个开放的行业标准,它定义了一种简介的,自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任.JWT可以使 ...

  8. JWT的基于JJWT在Java中使用

    1.什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式 ...

  9. JWT详解和使用(jjwt)

    JWT详解和使用 JWT是啥 JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证 ...

最新文章

  1. Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取
  2. web项目数据存入mysql数据库中文乱码问题
  3. oracle登录错误:ORA-28000: the account is locked 解决方法
  4. html下拉列表用ul,Vue.js做select下拉列表的实例(ul-li标签仿select标签)
  5. React Portals的使用
  6. 多线程:生产者消费者问题
  7. python中eval函数调用_如何从Python exec()/eval()调用中获取结果?
  8. R语言学习2-RMarkdown入门使用
  9. Recreate failovered primary database using Flashback Database
  10. centos7中firewall防火墙命令详解
  11. 五子棋人机交互c语言代码,Windows人机交互程序设计教学课件-第10课 五子棋程序.ppt...
  12. matlab进化树的下载,Dendroscope(进化树显示分析软件)
  13. P4086 [USACO17DEC]My Cow Ate My Homework S(静态数据预处理:后缀和、后缀最小值)
  14. 用python画圆锥_echarts 怎么画椭圆或者画圆锥
  15. 我在谷歌大脑见习机器学习的一年:Node.js创始人的尝试笔记
  16. CLion 的 Debug 模式是怎么回事
  17. 80x86 汇编语言编程:判定数据序列的奇偶个数
  18. tbc新服务器消息,TBC最新消息泄露:将分为4个阶段,详细内容分析
  19. C语言 深度探究C语言中的函数
  20. docker学习——杂记

热门文章

  1. 华为电脑linux指纹,华为电脑指纹锁怎么设置 以HUAWEI MateBook 13,windows 10系统为例...
  2. 架构师的职责、核心能力、能力修炼手册
  3. 经验分享:高德地图如何短时间快速完成春节出行备战工作?
  4. 信息学奥赛 课课通(c++)p1-3-1
  5. wifi信号桥怎么设置_wlan信号桥(图文)
  6. 网络克隆教程[远程装系统]
  7. leetcode 310周赛
  8. php如何美化表格,Excel表格总是做得不好看?简单5步美化表格,老板看了都加工资...
  9. Linux系统的网卡路由配置
  10. 华为Atlas200DK开发从零开始1.番外篇——Win10开发环境搭建,直连Atlas200DK开发板