1,JWT格式组成:
头部,负载,签名 header + payload + signature
头部:主要描述签名算法
负载:主要描述加密对象信息,如用户id,昵称,头像等,也可加入规范信息进去,如iss签发者,exp过期时间,sub面向用户,
签名: 主要是把 头部 负载进行加密 。
2,引入相关依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
3,编写JWTUtil工具类:
public class JwtUtil {
//
public static final String SUBJECT = "dapanger";
//过期时长
public static final long EXPIRE = 1000 * 60 * 60;
//秘钥
public static final String APPSECRET = "66666666";
/**
* 加密并获取token
* @param user
* @return
*/
public static String geneJsonWebToken(User user) {
String token = Jwts.builder().setSubject(SUBJECT)
.claim("id", user.getId()) //token存储信息
.claim("name", user.getName()) //token存储信息
.setIssuedAt(new Date()) //创建时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) // 过期时间
.signWith(SignatureAlgorithm.HS256, APPSECRET).compact();
;
return token;
}
/**
* 校验token
* @param token
* @return 是否为null 以判断token时候有效
*/
public static Claims checkJWT(String token) {
try {
final Claims claims = Jwts.parser().setSigningKey(APPSECRET).parseClaimsJwt(token).getBody();
return claims;
} catch (Exception e) {
return null;
}
}
}