首页 > 其他分享 >jwt配置及代码模板

jwt配置及代码模板

时间:2023-09-20 23:45:56浏览次数:43  
标签:String jwt 代码 JWT token Token Claims 声明 模板

jwt配置及代码模板

jwt工具类的使用

  • 依赖
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.6.0</version>
</dependency>
  • application.properties配置
jwt.config.key=userlogin
jwt.config.failureTime=3600000
  • 代码模板
@Getter
@Setter
@ConfigurationProperties("jwt.config")
public class JwtUtil {
    
//签名私钥
private String key;
//签名失效时间
private Long failureTime;

/**
 * 设置认证token
 *
 * @param id      用户登录ID
 * @param subject 用户登录名
 * @param map     其他私有数据
 * @return
 */
public String createJwt(String id, String subject, Map<String, Object> map) {

    //1、设置失效时间
    long now = System.currentTimeMillis();  //毫秒
    long exp = now + failureTime;

    //2、创建JwtBuilder
    JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(subject)
            .setIssuedAt(new Date())
            //设置签名防止篡改
            .signWith(SignatureAlgorithm.HS256, key);

    //3、根据map设置claims
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        jwtBuilder.claim(entry.getKey(), entry.getValue());
    }
    jwtBuilder.setExpiration(new Date(exp));

    //4、创建token
    String token = jwtBuilder.compact();
    return token;
}

/**
 * 解析token
 *
 * @param token
 * @return
 */
public Claims parseJwt(String token) {
    Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
    return claims;
}

这段代码是一个 JWT(JSON Web Token)工具类,用于创建和解析 JWT,以进行身份验证。

在JWT验证中,有三个重要的组成部分:头部(header)、载荷(payload)和签名(signature)。JWT是一个由这三部分组成的字符串,它使用签名密钥对头部和载荷进行签名,确保其完整性和真实性。

代码中的createJwt方法用于创建JWT。它接收用户ID用户名其他私有数据的映射作为参数。在方法内部,它首先获取当前时间,并计算出失效时间。然后使用Jwts.builder()创建一个JwtBuilder实例。接下来,设置ID、主题和签发时间,使用指定的签名算法(这里是HS256)和密钥对头部和载荷进行签名。最后,使用map中的键值对作为私有数据(claim)添加到JWT的载荷中,并设置失效时间。最终,通过调用compact()方法创建并返回JWT字符串。

parseJwt方法用于解析JWT。它接收JWT字符串作为参数,并使用指定的密钥对JWT进行解析验证签名。然后,它返回解析出的载荷(Claims)对象。

在实际使用中,您需要将密钥和签名失效时间(failureTime)设置为合适的值,并根据自己的业务逻辑调用这些方法来创建和验证JWT。

  • 关于Claims

Claims是JWT Token中存储的声明(Claims)信息的容器,说白了就是可以从中获得token解密后的信息,它提供了一些方法来方便地获取和设置声明的值。以下是一些常用的Claims方法:

1. `getId()`:获取Token的ID声明("jti")的值。
2. `setId(String id)`:设置Token的ID声明("jti")的值。
3. `getSubject()`:获取Token的主题声明("sub")的值。
4. `setSubject(String subject)`:设置Token的主题声明("sub")的值。
5. `getAudience()`:获取Token的接收方声明("aud")的值。
6. `setAudience(String audience)`:设置Token的接收方声明("aud")的值。
7. `getIssuedAt()`:获取Token的签发时间声明("iat")的值,返回的是一个`Date`对象。
8. `setIssuedAt(Date issuedAt)`:设置Token的签发时间声明("iat")的值,传入一个`Date`对象。
9. `getExpiration()`:获取Token的过期时间声明("exp")的值,返回的是一个`Date`对象。
10. `setExpiration(Date expiration)`:设置Token的过期时间声明("exp")的值,传入一个`Date`对象。
11. `put(String key, Object value)`:将自定义的声明键值对放入`Claims`中。
12. `get(String key)`:根据键获取自定义的声明值。

通过这些方法,你可以从Claims中获取标准声明的值(如ID、主题、接收方、签发时间、过期时间等),以及自定义声明。具体使用哪些方法取决于你的业务需求和JWT Token中所包含的声明信息。

开发过程中搭配拦截器实现jwt验证

JWT配合拦截器实例参考下一章:https://www.cnblogs.com/chuimber/p/17718845.html

标签:String,jwt,代码,JWT,token,Token,Claims,声明,模板
From: https://www.cnblogs.com/chuimber/p/17718844.html

相关文章

  • 拦截器实现JWT验证
    拦截器实现JWT验证要在每个请求发送后验证JWTToken的有效性,可以使用Spring中的拦截器(interceptor)来实现。拦截器可以在请求到达控制器之前对请求进行预处理,包括验证JWTToken的有效性。以下是一个简单的示例:首先,创建一个拦截器类JwtInterceptor,用于验证JWTToken的有效性://Jw......
  • AtomicInteger类代码内部逻辑
    AtomicInteger是什么一个可以原子更新的int值。有关原子变量属性的描述,请参阅java.util.concurrent.atomic包规范。AtomicInteger用于原子递增计数器等应用程序,不能用作Integer的替代品。但是,这个类确实扩展了Number,以允许处理基于数字的类的工具和实用程序进行统一访问。设......
  • 掌握Java运算符,让你的代码更高效
    Java是一种面向对象的编程语言,它支持多种运算符用于处理数据。在Java中,有多种类型的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。本文将详细介绍Java中的运算符。一、算术运算符加法运算符:+语法:result=a+b;示例:intresult=5+3;//result=8;减法运算符:-......
  • 测试linux代码运行时间
    1. 前置知识  (1)gettid内核给线程(轻量级进程)分配的进程id,全局(所有进程中)唯一;  (2)pthread_self()是在用户态实现的,获取的是相对于进程的线程控制块的首地址,只是在当前进程空间中是唯一的。不能保证同一进程先后多个线程具有不同的id。(当前一个线程结束其生命周期,进程又新......
  • 使用 Selenium 或其他工具模拟浏览器使用及语法代码
    使用Selenium模拟浏览器使用的代码示例如下:fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeys#创建浏览器驱动实例driver=webdriver.Chrome()#打开网页driver.get("https://www.example.com")#查找并填写表单search_box=driver.f......
  • Python(Web时代)- 超简单:一行代码就能搭建网站
    From: https://mp.weixin.qq.com/s/x2dJshrAdev4FweK4kwCyA-----------------------------------------------------------------------------------介绍Streamlit是一款非常强大,可以实现快速创建和共享数据应用的Python库。借助他,我们可以在数分钟内构建出功能齐全的Web应用......
  • R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据|附代码
    原文链接:http://tecdat.cn/?p=24456原文出处:拓端数据部落公众号最近我们被客户要求撰写关于RStan的研究报告,包括一些图形和统计输出。如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯。但是,你没有共轭先验。你可能会花费很长时间编写Metr......
  • Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
    原文链接:http://tecdat.cn/?p=23689最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测 ( 点击文末“阅读原文”获取完整代码数据)。在本文中,你将看到如何使用一个被称为长短时记忆的时间......
  • R语言中使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据|附代码数据
    原文链接:http://tecdat.cn/?p=20828 最近我们被客户要求撰写关于非凸惩罚函数回归的研究报告,包括一些图形和统计输出。本文使用lasso或非凸惩罚拟合线性回归,GLM和Cox回归模型的正则化,特别是最小最大凹度惩罚函数 (MCP) 和光滑切片绝对偏差惩罚(SCAD),以及其他L2惩罚的选项(“弹......
  • R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性|
    原文链接:http://tecdat.cn/?p=24334最近我们被客户要求撰写关于贝叶斯线性回归的研究报告,包括一些图形和统计输出。像任何统计建模一样,贝叶斯建模可能需要为你的研究问题设计合适的模型,然后开发该模型,使其符合你的数据假设并运行1.了解 Stan统计模型可以在R或其他统计语言的......