【Java】基于JWT生成用户token

我们在写后端的时候,经常需要在用户登录时,服务端给客户端生成一串根据账号的某个属性来生成token(用户令牌),JAVA中有个JWT的基于算法生成动态token的包,基于JWT生成动态TOKEN,下面是代码,首先是生成token的方法
需要下载JWT的包,我已经准备好了,链接为JWT包

private static final long EXPIRE_TIME = 15 * 60 * 1000;//默认15分钟
//私钥
private static final String TOKEN_SECRET = "your private key";
/*
* 根据用户ID生成签名
* @param userid 用户ID
* @return
*/
public static String createToken(String userId) {
try {
// 设置过期时间 默认十五分钟
Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
// 私钥和加密算法
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
// 设置头部信息
Map<String, Object> header = new HashMap<>(2);
header.put("Type", "Jwt");
header.put("alg", "HS256");
// 返回token字符串
return JWT.create()
.withHeader(header)
.withClaim("userId", userId)
.withExpiresAt(date)
.sign(algorithm);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}

这个是默认十五分钟自动失效的,所有不太担心被人破解的问题,下面一个方法是自定义失效时间
/*
* 生成token,自定义过期时间 毫秒
* @param **username**
* @param **password**
* @return
*/
public static String createToken(String userId,long expireDate) {
try {
// 设置过期时间
Date date = new Date(System.currentTimeMillis() + expireDate);
// 私钥和加密算法
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
// 设置头部信息
Map<String, Object> header = new HashMap<>(2);
header.put("Type", "Jwt");
header.put("alg", "HS256");
// 返回token字符串
return JWT.create()
.withHeader(header)
.withClaim("userId", userId)
.withExpiresAt(date)
.sign(algorithm);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

最后就是解析啦,验证token并解析成用户id
/**
* 验证token的正确性,并且解析成用户id
* @param **token**
* @return
*/
public static String verifyToken(String token){
try {
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
JWTVerifier verifier = JWT.require(algorithm).build();
DecodedJWT jwt = verifier.verify(token);
String userId = jwt.getClaim("userId").asString();
return userId;
} catch (Exception e){
return null;
}
}

最后是我的一个小验证,如果自己要延申也是没问题的
 public static void main(String[] args)
{
String userid = "123"; //用户ID
String userToken = createToken(userid); //生成token
System.out.println("这里是生成的token"+userToken); //打印用户token
String lastId = verifyToken(userToken); //验证并解析用户id
System.out.println("这里是验证并解析成id"+lastId); //把ID打印上去
}

JWT00

blank