流程:用户登录(用户名&密码)-> 后端方法验证(一般后端会有"安全"框架,开放一个白名单路径:/login)-> 验证通过生成Token返给前端-> 前端通过Cookie保存token之后请求在请求头中携带Token-> 后端验证Token没啥问题放行(一般都会配置拦截器或者啥的 验证通过就让你走,没有Token一般就直接给你拦下来,Token过期也拦下)->没有问题继续后面请求。
1.添加依赖
<!-- JWT依赖 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<!-- 版本自己选哈 -->
<version>0.7.0</version>
</dependency>
2.生成Token
public String createToken (String username){
Date nowDate = new Date();
Date expireDate = new Date(nowDate.getTime() + expire * 1000);//过期时间
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.claim("userName", username)//注意 这里面存放内容后面可以解析,别放贵重物品哈。
//public class DefaultClaims extends JwtMap implements Claims {
//这个东西是k:v后面取得时候别不会了,不行打印出来瞅一眼。
//.setSubject(subject)
.setIssuedAt(nowDate)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS256, Base64.decode(secret))//算法和密钥
//可以采用RSA非对称加密的方式
.compact();
}
3.解析Token
public Map parseToken(String token) {
Map<String,Object> map = new HashMap<>
//下面这一句比较关键
//注意setSigningKey(注意参数类型和加密时候保持一致)
Claims claims =
Jwts.parser().setSigningKey(Base64.decode(SECRET)).parseClaimsJws(token).getBody();
isTokenExpired(claims.getExpiration());
if (null != claims) {
Iterator iterator = claims.keySet().iterator();
jsonObjToken = new JSONObject();
while (iterator.hasNext()) {
String key = iterator.next().toString();
map.put(strKey, claims.get(key));
}
}
return map;
}