加入相关依赖
<!-- JWT相关 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
封装⽣产token方法
/**
* 根据⽤户信息,⽣成令牌
* @param user
* @return
*/
/**
* 过期时间 一周
*/
private static final long EXPIRE = 60000 * 60 * 24 * 7;
/**
* 加密密钥
*/
private static final String SECRET = "CSDNBLOG";
/**
* 令牌前缀
*/
private static final String TOKEN_PREFIX = "CSDNBLOG";
/**
* subject
*/
private static final String SUBJECT = "CSDNBLOG";
/**
* 根据用户信息,生成令牌
* @param user
* @return
*/
public static String geneJsonWebToken(User user){
String token = Jwts.builder().setSubject(SUBJECT) // 主题
.claim("img", user.getImg())
.claim("id", user.getId())
.claim("name", user.getName()) // 参数
.setIssuedAt(new Date()) // 下发时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) // 过期时间
.signWith(SignatureAlgorithm.HS256, SECRET).compact(); // 签名
token = TOKEN_PREFIX + token;
return token;
}
封装校验token方法
/**
* 效验token方法
* @param token
* @return
*/
public static Claims checkJWT(String token){
try {
final Claims claims = Jwts.parser().setSigningKey(SECRET)
.parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
.getBody();
return claims;
} catch (Exception e) {
return null;
}
}
测试方法
public static void main(String[] args) {
User user = new User();
user.setId(1L);
user.setName("CSDN博客");
user.setAge("24");
String token = JWTUtils.geneJsonWebToken(user);
System.out.println(token);
Claims claims = JWTUtils.checkJWT(token);
System.out.println(claims);
System.out.println(claims.get("name"));
}
返回值:
CSDNBLOGeyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJDU0ROQkxPR1NVQiIsImFnZSI6IjI0IiwiaWQiOjEsIm5hbWUiOiJDU0RO5Y2a5a6iIiwiaWF0IjoxNjA1MzQxNTUzLCJleHAiOjE2MDU5NDYzNTN9.AinXnOfPTvDTE79rIzUBouPHhdtGQJCf6WWW2MsdrN8
{sub=CSDNBLOGSUB, age=24, id=1, name=CSDN博客, iat=1605341553, exp=1605946353}
CSDN博客