JSON WEB TOKEN简称JWT,是用于对应程序上的用户进行身份验证的标记。也就是说,使用JWTS的应用程序不再需要保存有关其用户的cookie和session数据。此特性便于可伸缩性,同时保证应用程序的安全。
格式
- JWT就是一个字符串,经过加密处理和校验处理的字符串,形式为:A.B.C
- A由JWT头部信息header加密得到
- B由JWT用到的身份验证信息json数据加密得到
- C由A和B加密得到,是校验部分
操作流程 导入依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
通过解析Token得知,如果抛出SignatureException异常表示token不合法,抛出ExpiredJwtException异常表示token已过期
JWT工具类
public class JwtUtils{
private static final int TOKEN_TIME_OUT = 3600;
private static final String TOKEN_SECRET = "itcast";
public static String getToken(Map params){
long currentTime = System.currentTimeMillis();
return Jwts.builder()
.signWith(SignatureAlgorithm.HS512, TOKEN_SECRET)
.setExpiration(new Date(currentTime + TOKEN_TIME_OUT * 1000))
.addClaims(params)
.compact();
}
public static Claims getClaims(String token){
return Jwts.parser()
.setSigningKey(TOKEN_SECRET)
.parseClaimsJws(token)
.getBody();
}
public static boolean verifyToken(String token){
if(StringUtils.isEmpty(token)){
return false;
}
try{
Claims claims = Jwts.parser()
.setSigningKey(TOKEN_SECRET)
.parseClaims(token)
.getBody();
}catch(Exception e){
return false;
}
return true;
}
}
|