【JWT】 JAVA && VUE3
什么是JWT
- JWT 全程 Josn Web Token, 以json对象为载体的签名形式,在不同服务端间进行安全通信
- 一般情况下 用户登陆成功后,后续的每个请求都要携带token,服务端在对token进行校验后 才会返回数据
JWT 的三部分组成
iss: jwt签发者
sub: jwt所面向,使用jwt的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须大于签发时间
nbf: 定义在指定时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
{
'name':'',
}
- signature
对前两个结果拼接 进行再加密
java 代码
package com.swiper.www.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class JwtUtil {
private final static SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS256;
private final static String secret = "xxx";
private final static Long access_token_expiration = 7200L;
private final static String jwt_iss = "justkang";
private final static String subject = "all";
public static String CreateJwtToken(Integer id, String userName , String pass) {
Map<String, Object> map = new HashMap<>();
map.put("alg", "HS256");
map.put("typ", "JWT");
Map<String, Object> claims = new HashMap<String, Object>();
claims.put("password", pass);
claims.put("userName", userName);
claims.put("id", id);
claims.put("iss", jwt_iss);
return Jwts.builder()
.setHeader(map)
.setClaims(claims)
.setId(UUID.randomUUID().toString())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + access_token_expiration * 1000))
.setSubject(subject)
.signWith(SIGNATURE_ALGORITHM, secret)
.compact();
}
public static Claims ParseJwt(String jwt) {
Claims claims = null;
try {
claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt).getBody();
} catch (Exception e) {
e.printStackTrace();
}
return claims;
}
}