JWT
导入依赖
<!-- JWT坐标 -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.2</version>
</dependency>
具体方法
/***
* jwt工具类
*/
public class JWTUtil {
//密钥
private static final String SECRET = "123456789";
//过期时间
private static final long EXPIRE_TIME = 7 * 24 * 60 * 60 * 1000;
/*
* token签发 方式一
public static String sign (Integer userId, String userName){
//date对象
Date expiration = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//withHeader 需要传递map
Map<String,Object> map = new HashMap();
String token = JWT.create()
.withHeader(map) //可以省略
.withClaim("userId",userId)
.withClaim("userName",userName)
.withExpiresAt(expiration)
.sign(Algorithm.HMAC256(SECRET));
return token;
}*/
/**
* token签发 方式二
* @param map
* @return
*/
public static String sign (Map<String, String> map){
// 七天过期
Calendar instance = Calendar.getInstance();
instance.add(Calendar.DATE,7);
final JWTCreator.Builder builder = JWT.create();
map.forEach((k,v) ->{
builder.withClaim(k,v);
});
String token = builder.withExpiresAt(instance.getTime())
.sign(Algorithm.HMAC256(SECRET));
return token;
}
/**
* 验证token
* @param token
* @return
*/
public static Boolean verify (String token){
DecodedJWT verify = null;
try {
verify = JWT.require(Algorithm.HMAC256(SECRET)).build().verify(token);
return true;
}catch (SignatureVerificationException e){
System.out.println("无效签名");
return false;
}catch (TokenExpiredException e){
System.out.println("token过期");
return false;
}catch (AlgorithmMismatchException e){
System.out.println("算法不一致");
return false;
}catch (Exception e){
System.out.println("无效token");
return false;
}
}
/**
* 从 payload 可以直接获取存入信息
* @param token
* @return
*/
public static String getUser(String token){
DecodedJWT verify = JWT.decode(token);
String userName = verify.getClaim("name").asString();
return userName;
}
}