引入jwt依赖
<!--JWT令牌--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
1.生成一个token
/**
* @描述: 生成token的方法
*/
public static String createToken() {
//token包含三部分信息
//头部信息
Map<String, Object> headMap = new HashMap<>();
headMap.put("alg", "HS256");//加密算法
headMap.put("type", "JWT");//JWT
//有效载荷:放用户信息,不放敏感信息 用户信息
Map<String, Object> payLoad = new HashMap<>();
payLoad.put("userid", 1);//用户id
payLoad.put("username", "1");//用户名称-账号
//失效时间
long startTime = System.currentTimeMillis();
long endTime = startTime + 800*24*60*60;//【+毫秒值】
//签名
String token = Jwts.builder()
.setHeader(headMap)
.setClaims(payLoad)
.setExpiration(new Date(endTime))
.signWith(SignatureAlgorithm.HS256, "zhouws") //加盐,不容易被破解
.compact();
return token;
}
2.解析token
/**
* @描述: 解析toke方法
*/
public static Map<String, Object> getClaimsFromToken(String token) {
Map<String, Object> map = new HashMap<>();
try {
Claims claims = Jwts.parser()
.setSigningKey("zhouws")
.parseClaimsJws(token)
.getBody();//解密完成获取信息
map.put("code", 200);
map.put("claims",claims);
} catch (SignatureException e) {
map.put("code", 500);
map.put("msg", "token无效,非法访问");
return map;
} catch (ExpiredJwtException e) {
map.put("code", 500);
map.put("msg", "登录超时,请重新登录");
return map;
} catch (Exception e) {
map.put("code", 500);
map.put("msg", "未知错误异常");
return map;
}
return map;
}