Java基于JWT实现token认证
2022-08-25 本文已影响0人
永远爱你ol
网上关于JWT的文章很多,我想分享一个相对简洁的版本。JWT(JSON Web Tokens),生成的token是由三部分组成的Header,Payload,Signature。其实整个的生成过程就是给这三部分添加一些信息。具体可以看官网的一些介绍:https://jwt.io/introduction。
生成token的示例:
//设置token过期时间为3分钟
private final static long EXPIRED_TIME = 3 * 60 * 1000;
//设置token的密钥
private final static String SECRET = "token123";
public static String token(User user) {
Date signDate = new Date();
Date date = new Date(System.currentTimeMillis() + EXPIRED_TIME);//过期时间
Algorithm algorithm = Algorithm.HMAC256(SECRET);//进行加密算法
//token的Header信息
Map<String, Object> map = new HashMap<>();
map.put("alg", "HS256");
map.put("typ", "JWT");
String token=JWT.create()
//(token的Header信息)
.withHeader(map)
//设置当前签发时间(token的Payload信息)
.withIssuedAt(signDate)
//设置token过期时间(token的Payload信息)
.withExpiresAt(date)
//自定义存放用户id在tokne中(token的自定义Payload信息)
.withClaim("userId", user.getUserId())
//自定义存放用户名在token中(token的自定义Payload信息)
.withClaim("username", user.getName())
//(token的Signature信息)
.sign(algorithm);
return token;
}
接下来就是验证token:
public static boolean verifyToken(String token) {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
try {
//这是密钥的校验,同时也可以对其他的一些信息进行校验(比如自定义的用户ID)
JWTVerifier jwtVerifier = JWT.require(algorithm).build();
//校验并获取的数据结果
DecodedJWT decodedJWT = jwtVerifier.verify(token);
//从数据结果中获取token中的信息
String result1=decodedJWT.getClaim("username").asString();
//直接通过token获取数据信息
String result2=JWT.decode(token).getClaim("userId").asString();
return true;
}catch (JWTVerificationException e) {
e.printStackTrace();
return false;
}
}
最后附上所需要的pom依赖:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>