token由head头部,payLoad消息体,signature签名
maven导入
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
创建token
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class CreateJWT {
public static void main(String[] args) {
String priKey="dajitui123";
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
long ttlMillis=10*1000;
Date expDate=null;
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
expDate = new Date(expMillis);
}
JwtBuilder builder= Jwts.builder().setId("123").setSubject("jwt测试").setIssuedAt(new Date())
.setExpiration(expDate)
.signWith(SignatureAlgorithm.HS256,priKey);
String s=builder.compact();
System.out.println(s);
}
}
注意下过期时间,其中的System.currentTimeMillis()是毫秒,所以要乘以1000变成秒
JwtBuilder builder = Jwts.builder()
.setId(id) // JWT_ID
.setAudience("") // 接受者
.setClaims(null) // 自定义属性
.setSubject("") // 主题
.setIssuer("") // 签发者
.setIssuedAt(new Date()) // 签发时间
.setNotBefore(new Date()) // 失效时间
.setExpiration(long) // 过期时间
.signWith(signatureAlgorithm, secretKey);// 签名算法以及密匙
解密信息
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureException;
public class ParseJWT {
public static void main(String[] args) {
String pubKey="dajitui123";
String token="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMjMiLCJzdWIiOiJqd3TmtYvor5UiLCJpYXQiOjE1NDQ4NjkxMTF9.uIQ4o7N9x5JGmUVg8RcJlwqS3IXBjfRh-V_n61FBwW0";
try {
Claims claims= Jwts.parser().setSigningKey(pubKey).parseClaimsJws(token).getBody();
System.out.println("id"+claims.getId());
System.out.println("subject"+claims.getSubject());
System.out.println("issuedAt"+claims.getIssuedAt());
}catch (SignatureException e){
System.out.println("密钥错误");
}
}
}
jwt异常
SignatureException:签名错误异常
MalformedJwtException:JWT格式错误异常
ExpiredJwtException:JWT过期异常
UnsupportedJwtException:不支持的JWT异常