方式一:自定义工具类
手动编写代码,写两个方法,一个生成,一个解析;
第一步:导入依赖
<!--JWT令牌依赖-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!--jdk9以后需添加此依赖-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
第二步:手动编写代码
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
/**
* token生成工具
*/
public class JwtUtils {
/**
* 有效期,单位是毫秒
*/
private static Long expire = 259200000L;
/**
* 生成JWT令牌
*/
public static String generateJwt(Map<String, Object> claims, String signKey) {
String jwt = Jwts.builder()
.addClaims(claims)
.signWith(SignatureAlgorithm.HS256, signKey)
.setExpiration(new Date(System.currentTimeMillis() + expire))
.compact();
return jwt;
}
/**
* 解析JWT令牌
*/
public static Claims parseJWT(String jwt, String signKey) {
Claims claims = Jwts.parser()
.setSigningKey(signKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
}
第三步:使用
配置tokenKey
# tokenKey(需要四个字符或以上)
token:
key: csdn
注入配置
@Value("${token.key}")
private String tokenKey;
生成token
// 写入用户信息
HashMap<String, Object> tokenMap = new HashMap<>();
tokenMap.put("userName",userDB.getUsername());
tokenMap.put("id",userDB.getUserId());
// 生成token
String token = JwtUtils.generateJwt(tokenMap,tokenKey);
测试
方式二:Hutool工具包
第一步:导入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.6</version>
</dependency>
第二步:使用
配置tokenKey
# tokenKey
token:
key: csdn
注入配置
@Value("${token.key}")
private String tokenKey;
使用createToken()方法生成token,注意方法参数为tokenKey的字节数组;
// 写入用户信息
HashMap<String, Object> tokenMap = new HashMap<>();
tokenMap.put("userName",userDB.getUsername());
tokenMap.put("id",userDB.getUserId());
// 生成token
String token = JWTUtil.createToken(tokenMap,tokenKey.getBytes());
测试
总结
推荐使用方法二,方法一需要导入两个依赖,并且tokenKey长度是有限制的,字符长度要为4位或者超过4位。