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; //token的有效期为1小时private static final String TOKEN_SECRET = "itcast"; //加密key、/*** 生成Token** @param params* @return*/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(); }/*** 获取token中的claims信息** @param token* @return*/public static Claims getClaims(String token){return Jwts.parser().setSigningKey(TOKEN_SECRET).parseClaimsJws(token).getBody(); }/*** Token是否有效 true--有效 false--无效* @param token* @return*/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;}
}