Java集成JWT
时间:2022-07-22
本文章向大家介绍Java集成JWT,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
继之前更新对登录授权和令牌的博客之后,今天如期带来Java的集成
推荐阅读:
新建一个maven项目
依赖
<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.6</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
创建 Member
@Data
public class Member {
private String id;
private String nickname;
private String avatar;
}
创建 JwtUtils
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
/**
* @author 乐心湖
* @date 2020/7/31 20:08
**/
public class JwtUtils {
public static final String SUBJECT = "lxh-user";
//秘钥
public static final String APP_SECRET = "79e7c69681b8270162386e6daa53d1dc";
//过期时间,毫秒,30分钟
public static final long EXPIRE = 1000 * 60 * 30;
/**
* 生成Jwt令牌
* @return
*/
public static String generateJwt(Member member){
String token = Jwts.builder()
.setHeaderParam("typ", "JWT") //令牌类型
.setHeaderParam("alg", "HS256") //签名算法
.setSubject(SUBJECT) //令牌主题
.setIssuedAt(new Date()) //签发时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) //过期时间
.claim("id", member.getId())
.claim("nickname", member.getNickname())
.claim("avatar", member.getAvatar())
.signWith(SignatureAlgorithm.HS256, APP_SECRET).compact();
return token;
}
/**
* 校验jwt
* @param jwtToken
* @return
*/
public static Claims checkJwt(String jwtToken){
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
return claimsJws.getBody();
}
}
JwtTest 测试
生成一个JWT
@Test
public void testGenerateJwt(){
Member member = new Member();
member.setId("10000");
member.setNickname("xn2001");
member.setAvatar("1.png");
String jwt = JwtUtils.generateJwt(member);
System.out.println(jwt);
}
输出的就是我们生成的 JWT Token 了
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJseGgtdXNlciIsImlhdCI6MTU5NjE5ODIxOCwiZXhwIjoxNTk2MjAwMDE4LCJpZCI6IjEwMDAwIiwibmlja25hbWUiOiJ4bjIwMDEiLCJhdmF0YXIiOiIxLnBuZyJ9.vnjit4PGJWOnh7TKIExiF2lw2p0OQpdtCIe55Ponjfs
验证 token
@Test
public void testCheckJwt(){
Claims claims = JwtUtils.checkJwt(
//这里是你生成的JWT "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJseGgtdXNlciIsImlhdCI6MTU5NjE5ODIxOCwiZXhwIjoxNTk2MjAwMDE4LCJpZCI6IjEwMDAwIiwibmlja25hbWUiOiJ4bjIwMDEiLCJhdmF0YXIiOiIxLnBuZyJ9.vnjit4PGJWOnh7TKIExiF2lw2p0OQpdtCIe55Ponjfs"
);
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);
}
10000 xn2001 1.png
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 最大子序列和的接口函数(2)
- 最大子序列和的接口函数(3)
- 【剑指Offer】二叉树的深度
- 运行时间中的对数
- IIC协议
- 通过例子学习编写shell
- 【redis6.0.6】redis源码慢慢学,慢慢看 -- 第三天:MakeFile
- 继续学习Shell脚本(详细)
- 将linux终端的输出信息保存到log中
- UNIX网络编程卷1(第三版)一个简单的时间获取服务器的程序
- Python数据分析实战(3)Python实现数据可视化
- xresloader转表工具链增加了一些新功能(map,oneof支持,输出矩阵,基于模板引擎的加载代码生成等)
- 数据结构之树
- UNIX网络编程卷1(第三版)套接字编程简介
- UNIX网络编程卷1(第三版)readn,writen和readline函数