JWT简单使用
创建一个Maven项目,并导入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qbb</groupId>
<artifactId>jwt</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
测试案例
使用jwt获取token
public class JwtUtils {
// 过期时间
public static final long EXPIRE = 30 * 1000;
// APP_SECRET
public static final String APP_SECRET = "QIUQIU&LL";
/**
* 获取token
* @param id
* @param nickName
* @param avatar
* @return
*/
public static String genJwt(String id, String nickName, String avatar) {
// 创建Jwt对象
JwtBuilder builder = Jwts.builder();
// 第一部分 JWT头部 header
builder.setHeaderParam("alg", "HS256"); // 签名算法,默认值
builder.setHeaderParam("typ", "JWT"); // 令牌类型,默认值
// 第二部分 有效载荷 playload
// 默认字段
builder.setId("1"); // jwt唯一身份标识
builder.setSubject("qbb-user"); // 令牌的主题
builder.setIssuedAt(new Date()); // 签发时间
builder.setExpiration(new Date(System.currentTimeMillis() + EXPIRE));// 设置过期时间
// 私有字段
builder.claim("id", id);
builder.claim("nickName", nickName);
builder.claim("avatar", avatar);
// 第三部分 签名Hash
builder.signWith(SignatureAlgorithm.HS256, APP_SECRET);
// 将三部分连接起来
String token = builder.compact();
return token;
}
}
@Test
public void testGenJwt() {
Member member = new Member();
member.setId("100");
member.setNickName("qbb");
member.setAvatar("hello.jpg");
String token = JwtUtils.genJwt(member.getId(), member.getNickName(), member.getAvatar());
System.out.println(token);
}
result: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoicWJiLXVzZXIiLCJpYXQiOjE2NDYyMzEwMjcsImV4cCI6MTY0NjIzMTA1NywiaWQiOiIxMDAiLCJuaWNrTmFtZSI6InFiYiIsImF2YXRhciI6ImhlbGxvLmpwZyJ9.x5Rxka-J-HPOL_fM1zIxAl9y45UzQJWu_xI-s5Bzfuc
解析jwtToken
/**
* 解析jwtToken
* @param jwtToekn
* @return
*/
public static Claims checkJwt(String jwtToekn) {
// 获取解析器
JwtParser parser = Jwts.parser();
Jws<Claims> claimsJws = parser.setSigningKey(APP_SECRET).parseClaimsJws(jwtToekn);
JwsHeader header = claimsJws.getHeader();
Claims body = claimsJws.getBody();
String signature = claimsJws.getSignature();
System.out.println("header:" + header);
System.out.println("body:" + body);
System.out.println("signature:" + signature);
return body;
}
@Test
public void testCheckJwt() {
Claims claims = JwtUtils.checkJwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoicWJiLXVzZXIiLCJpYXQiOjE2NDYyMzEwMjcsImV4cCI6MTY0NjIzMTA1NywiaWQiOiIxMDAiLCJuaWNrTmFtZSI6InFiYiIsImF2YXRhciI6ImhlbGxvLmpwZyJ9.x5Rxka-J-HPOL_fM1zIxAl9y45UzQJWu_xI-s5Bzfuc");
String id = (String) claims.get("id");
String nickName = (String) claims.get("nickName");
String avatar = (String) claims.get("avatar");
System.out.println(id);
System.out.println(nickName);
System.out.println(avatar);
}
注意:测试的时候记得把测试时间设置长一点,不然会报错哦~ io.jsonwebtoken.ExpiredJwtException
JWT简单使用的更多相关文章
- Asp.net Core Jwt简单使用
.net 默认新建Api项目不需要额外从Nuget添加Microsoft.AspNetCore.Authentication.JwtBearer appsettings.json { "Lo ...
- 3. laravel 5.5 多子域名 + dingo + jwt 简单环境搭建
环境介绍 laravel 5.5.* + php 7.2 + mysql 5.7.27 1. 创建 laravel 项目 (自行 配置一下域名 如果 不会 请参考laravel 的第一篇文章) com ...
- asp.net mvc使用jwt简单例子
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景.JWT的声 ...
- jwt 简单基本使用加密解密
import jwt # 加密 encode_jwt=jwt.encode({'uid':'123'},'密钥123',algorithm='HS256') print(encode_jwt) # 解 ...
- [认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)
1 RFC6749还有哪些可以完善的? 1.1 撤销Token 在上篇[认证授权] 1.OAuth2授权中介绍到了OAuth2可以帮我们解决第三方Client访问受保护资源的问题,但是只提供了如何获得 ...
- oAuth2.0及jwt介绍
oAuth2.0流程示意如下: 关于jwt介绍: 说明: 关于jwt简单说明一下,jwt即为json web token,是用来和服务端建立加密通信所使用的的一种“约定”,主要组成见上图即可.服务端一 ...
- 玩转 SpringBoot 2 之整合 JWT 上篇
前言 该文主要带你了解什么是 JWT,以及JWT 定义和先关概念的介绍,并通过简单Demo 带你了解如何使用 SpringBoot 2 整合 JWT. 介绍前在这里我们来探讨一下如何学习一门新的技术, ...
- Spring Security + JWT学习
开胃:Oauth2认证流程分析 现在第三方登录已经很普遍了,随便哪个App都会有使用微信登录,使用手机号码登录,或者使用支付宝登录等功能... 下面我们就以使用微信登录,做一个简单的流程分析分析 开胃 ...
- JWT实现过程及应用
jwt实现过程 # 用户登录,返回给客户端token(服务端不保存),用户带着token,服务端拿到token再校验; 1,提交用户名和密码给服务端,如果登陆成功,jwt会创建一个token,并返回; ...
- Jwt的新手入门教程
Jwt的新手入门教程 1.Jwt究竟是什么东东? 先贴官网地址:JSON Web Tokens - jwt.io 再贴官方的定义: What is JSON Web Token? JSON ...
随机推荐
- Shiro配置类中的各个配置项浅谈
背景: 上文中在落地实践时,对Shiro进行了相关的配置,并未对其含义作用进行详细学习,本章将进一步详解其作用含义. Shiro配置类中的各个配置项的作用: @Bean public Security ...
- Esxi 8 更换Nvme硬盘后 如何迁移Esxi主机和虚拟机到新硬盘
Esxi 8 更换Nvme硬盘后 如何迁移Esxi主机和虚拟机到新硬盘 因为去年底开始SSD和内存大幅降价,ITGeeker技术奇客就想着给自己的小主机升个级,换个三星1G的980硬盘,再加了一根32 ...
- 如何平息WPS for linux启动后,笔记本风扇的怒吼
create:2022-09-06 20:02:45 WPS启动后,点击菜单栏右上角[未同步]按钮,不登录,直接关掉.几秒后,笔记本风扇嗷嗷叫.桌面conky显示wpscloudsvr进程CPU占用8 ...
- Skynet:Debug Console的扩展
起因 最近上线服务器遇到了一些问题,上个月CPU暴涨的问题,那个经查验是死循环导致endless loop了. 这周又遇到了mem占用达到96%的问题,在debug console里调用了gc之后,跌 ...
- 文心一言 VS 讯飞星火 VS chatgpt (97)-- 算法导论9.3 3题
三.用go语言,假设所有元素都是互异的,说明在最坏情况下,如何才能使快速排序的运行时间为O(nlgn). 文心一言: 快速排序是一种基于分治策略的排序算法,其平均时间复杂度为O(nlgn).在最坏情况 ...
- Go with Protobuf
原文在这里. 本教程为 Go 程序员提供了使用Protocol buffer的基本介绍. 本教程使用proto3向 Go 程序员介绍如何使用 protobuf.通过创建一个简单的示例应用程序,它向你展 ...
- 手把手教你写一个JSON在线解析的前端网站1
前言 作为一名Android开发,经常要跟后端同事联调接口,那么总避免不了要格式化接口返回值,将其转换为清晰直观高亮的UI样式以及折叠部分内容,方便我们查看定位关键的信息. 一直以来都是打开Googl ...
- 用go封装和实现扫码登录
用go封装和实现扫码登录 本篇为用go设计开发一个自己的轻量级登录库/框架吧 - 秋玻 - 博客园 (cnblogs.com)的扫码登录业务篇,会讲讲扫码登录的实现,给库/框架增加新的功能,最后说明使 ...
- Nginx惊群现象的两种解决办法
惊群现象: 惊群现象是指由多个worker进程监听同一个Socket事件时,当事件发生时,相关的所有进程被惊醒,但最终只能有一个进程对该事件进行处理,其他进程会重新休眠,从而导致系统资源的浪费和系统性 ...
- IEEE754浮点数与字节数互转工具
前段时间做的一个小工具,分享一下. 提供浮点数和字节的相互转换. 下载