Jwt:
1.概念:
一种紧凑和自包含的方式,它用于各方之间作为JSON对象安全地传输信息
2.组成:
分别是Header、payload、signature;
3.Header:
`alg`属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);
`typ`属性表示这个令牌(token)的类型(type),JWT 令牌统一写为`JWT`。
最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串。
4.Payload:
部分也是一个 JSON 对象,用来存放实际需要传递的数据。
5.Signature:
它是由3个部分组成,先是用 Base64 编码的 header 和 payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。secret就是在最后第二次加密时加的盐,算是一个秘钥(只保留在服务器),不向外部透露。
6.导包:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
7.yml文件:
#设置Jwt的密钥
jwt.securt=qf_live
#设置签发人
jwt.issuer=zhangdeshaui
#设置主题
jwt.subject=zhangdeshaui
7.代码:
@Component
public class JWTUtils {
//设置公钥信息
@Value("${jwt.securt}")
private String srcurt;
//获取签发人
@Value("${jwt.issuer}")
private String issuer;
//获取主题
@Value("${jwt.subject}")
private String subject;
//加密的方法
public String createToken(LiveUser liveUser){
//1.设置加密的算法,以及密钥
Algorithm algorithm = Algorithm.HMAC256(srcurt);
//2.我们需要设置头部信息
Map map = new HashMap<>();
map.put("alg","HS256");
map.put("typ","JWT");
//3.生成token串
String token = JWT.create().withHeader(map)
.withIssuer(issuer)//签发人
.withIssuedAt(new Date())//生成时间
.withSubject(subject)//主题
.withClaim("username", liveUser.getLoginName())
.sign(algorithm);//加密,以及算法
return token;
}
//解密的方法
public String verfiyToken(String token) {
//1.设置加密的算法,以及密钥
Algorithm algorithm1 = Algorithm.HMAC256(srcurt);
JWTVerifier verifier = JWT.require(algorithm1).withIssuer(issuer).build();
try {
DecodedJWT verify = verifier.verify(token);
//获取到自定义的内容
Claim username = verify.getClaim("username");
return username.asString();
}catch (Exception e){
System.out.println(e.getMessage());
return null;
}
}
}