基于前后端分离的身份认证方式——JWT

什么是JWT

JWT——Json web token

是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态、分布式的Web应用授权。

现在一般都用redis来出来token做前后端分离,但jwt在某些时候也可以代替redis来处理token。

pom的配置

<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.3.0</version>
</dependency>

简单的使用方法:

 public String generateToken(UserDTO user) {
Date nowDate = new Date();
user.setPassword("");
Date expiryDate = new Date(nowDate.getTime() + jwtExpiration);
try {
String newToken = JWT.create()
.withSubject(user.getId().toString())
.withClaim("current_user", JSON.toJSONString(user))
.withIssuedAt(nowDate)
.withExpiresAt(expiryDate)
.sign(Algorithm.HMAC256(jwtSecret));
return newToken;
} catch (UnsupportedEncodingException exception){
logger.error("Unsupported JWT signature");
} catch (JWTCreationException exception){
logger.error("Create JWT signature exception");
}
return null;
} public boolean validateToken(String authToken) {
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(jwtSecret))
.build();
DecodedJWT jwt = verifier.verify(authToken);
return true;
} catch (UnsupportedEncodingException e) {
logger.error("Unsupported JWT signature");
} catch (JWTVerificationException exception) {
logger.error("Verification JWT signature exception");
}
return false;
} public Long getUserIdFromJWT(String token) {
DecodedJWT jwt = JWT.decode(token);
return Long.parseLong(jwt.getSubject());
} public Date getExpiresDateFromJWT(String token) {
DecodedJWT jwt = JWT.decode(token);
return jwt.getExpiresAt();
}

1,在后端把用户的信息生成token,2,验证过期,3,从token得到你需要的信息,4,得到失效时间

还有些配置设置如下:

# 是否使用app.jwt.test.token的token作为测试(获取用户id为0)
app.jwt.allow.test.token=true
app.jwt.test.token=test_token
app.jwt.secret=jwt_test_$test
# token过期时间,单位是毫秒
app.jwt.expiration=43200000
# token剩余指定时间时刷新,单位是毫秒
app.jwt.refresh.limit=14400000
上一篇:python 类继承演示范例的代码


下一篇:Codeforces Round #407 (Div. 2) D,E