jwt的使用方式
jwt简介
JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式)。它是在Web环境下两个实体之间传输数据的一项标准。实际上传输的就是一个字符串。广义上讲JWT是一个标准的名称;狭义上JWT指的就是用来传递的那个token字符串
jwt的简单操作方式
public class Test {
public static void main(String[] args) {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH,+1);//+1今天的时间加一天
date = calendar.getTime();
Test test = new Test();
String s = test.buildJwt(new Date());
System.out.println(s);
boolean valid = test.isJwtValid(s);
System.out.println(valid);
}
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);
}
// 生成jwt令牌
public String buildJwt(Date exp) {
String jwt = Jwts
.builder()
//SECRET_KEY是加密算法对应的密钥,这里使用额是HS256加密算法
.signWith(SignatureAlgorithm.HS256, "123456789")
//expTime是过期时间
.setExpiration(exp)
.setSubject("{\"userid\":\"1\",\"usename\":\"管理员\",\"orgid\":\"999000001\"}")
.compact();
return jwt;
}
// 解密jwt令牌
public boolean isJwtValid(String jwt) {
try {
//解析JWT字符串中的数据,并进行最基础的验证
Claims claims = Jwts.parser()
//SECRET_KEY是加密算法对应的密钥,jjwt可以自动判断机密算法
.setSigningKey("SIRM_CLOUD_2018")
//jwt是JWT字符串
.parseClaimsJws(jwt)
.getBody();
System.out.println(claims);
return true;
//在解析JWT字符串时,如果密钥不正确,将会解析失败,抛出SignatureException异常,说明该JWT字符串是伪造的
//在解析JWT字符串时,如果‘过期时间字段’已经早于当前时间,将会抛出ExpiredJwtException异常,说明本次请求已经失效
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}