废话不多说,直接来干货!!!
其中重要的是:
1.有效载荷(存放的是token的具体信息,因为jwt是采用的base64编码组成,所以不要把敏感的信息存入,比如:密码)
2.签名中的秘钥也就是盐,不能泄露
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
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); } }
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); }