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