jwt加密和解密
程序员文章站
2024-03-14 15:34:28
...
首先需要导入jjwt.jar jackson-annotations jackson-core jackson-databind四个jar
public class JWTUtil extends ActionSupport{
private static final long serialVersionUID = 1L;
private static final String SECRET_KEY = "123456789";
public void jwtTest() throws InterruptedException {
// 设置3秒后过期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long time = System.currentTimeMillis() + 30 * 60 * 1000;
String jwt = this.buildJwt(new Date(time));
System.out.println("jwt = " + jwt);
// 验证token是否可用
boolean isOk = this.isJwtValid(jwt);
System.out.println(isOk);
}
public String buildJwt(Date exp) {
String jwt = Jwts
.builder()
//SECRET_KEY是加密算法对应的**,这里使用额是HS256加密算法
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
//expTime是过期时间
.setExpiration(exp)
.claim("name", "hahah")
.claim("age", "18")
//该方法是在JWT中加入值为vaule的key字段
.claim("key", "256431556855256655265")
.compact();
return jwt;
}
public boolean isJwtValid(String jwt) {
try {
//解析JWT字符串中的数据,并进行最基础的验证
Claims claims = Jwts.parser()
//SECRET_KEY是加密算法对应的**,jjwt可以自动判断机密算法
.setSigningKey(SECRET_KEY)
//jwt是JWT字符串
.parseClaimsJws(jwt)
.getBody();
System.out.println(claims);
//获取自定义字段key
String vaule = claims.get("key", String.class);
//判断自定义字段是否正确
if ("vaule".equals(vaule)) {
return true;
} else {
return false;
}
//在解析JWT字符串时,如果**不正确,将会解析失败,抛出SignatureException异常,说明该JWT字符串是伪造的
//在解析JWT字符串时,如果‘过期时间字段’已经早于当前时间,将会抛出ExpiredJwtException异常,说明本次请求已经失效
} catch (Exception e) {
return false;
}
}
}
完事。