JWT的介绍
废话不多说,直接来干货!!!
1.JWT的组成
其中重要的是:
1.有效载荷(存放的是token的具体信息,因为jwt是采用的base64编码组成,所以不要把敏感的信息存入,比如:密码)
2.签名中的秘钥也就是盐,不能泄露
2. JWT的生成
2.1依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
2.2 token的生成
public class JwtToken{
// 这块我是使用了主方法在测试,所以设置为了静态
private static String secret = "yyds";
public static void main(String[] args) {
Map<String, Object> header = new HashMap<String, Object>();
header.put(JwsHeader.TYPE, JwsHeader.JWT_TYPE);
header.put(JwsHeader.ALGORITHM, "HS256");
Map<String, Object> claims = new HashMap<String, Object>();
claims.put("phone", "15191847514");
claims.put("id", "2");
// 生成token
String jwt = Jwts.builder()
.setHeader(header) //header,可省略
.setClaims(claims) //payload,存放数据的位置,不能放置敏感数据,如:密码等
.signWith(SignatureAlgorithm.HS256, secret) //设置加密方法和加密盐
.setExpiration(new Date(System.currentTimeMillis() + 3000)) //设置过期时间,3秒后过期
.compact();
System.out.println(jwt);
}
}
2.3 token的解析
public class ParseToken {
public static void main(String[] args) {
// 这块的token使用的是上面生成的token
String token ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwaG9uZSI6IjE1MTkxODQ3NTE0IiwiaWQiOiIyIn0.e9Fu7rOq70dsg1X0yBVLF1xFJnh6r67anVdO7XxVdyA";
String secret = "yyds";
// 通过token解析数据
Map<String, Object> body = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
System.out.println(body);
}