官网:https://jwt.io/
1. 简介
JWT:Json Web Tokens 通用令牌生成算法。JSON Web令牌是一种开放的行业标准 RFC 7519方法,用于在双方之间安全地表示声明。重要、安全要求较高的信息交互,可以采用JWT算法。
- Header - 头
json格式
头部信息:声明签名涉及的加密方式、令牌生成算法(JWT)
- PayLoad - 有效荷载
json格式
内容信息:用户信息或者是令牌的信息
- Sign - 签名
签名信息:是根据头和内容对应的base64url格式,经过指定加密算法生成的密文
JWT的结果:
header的json字符串的Base64URL字符串
.PayLoad的json字符串的Base64URL字符串
.签名
2. JWT 工具类
1 2 3 4 5
| <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm;
import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Date; import java.util.UUID;
public class JwtUtil {
public static String createJWT(String msg) { JwtBuilder jwtBuilder = Jwts.builder(); jwtBuilder.setId(UUID.randomUUID().toString().replaceAll("-", "")); jwtBuilder.setIssuedAt(new Date()); jwtBuilder.setSubject(msg); jwtBuilder.signWith(SignatureAlgorithm.HS256, createKey()); return jwtBuilder.compact(); }
public static String parseJWT(String msg) { return Jwts.parser().setSigningKey(createKey()).parseClaimsJws(msg).getBody().getSubject(); }
private static SecretKey createKey() { String key = "jwt_test_1234"; return new SecretKeySpec(key.getBytes(), "AES"); }
public static void main(String[] args) { String p = "123456"; String jw = JwtUtil.createJWT(p); System.out.println("token 密文:" + jw); System.out.println("token 解析:" + JwtUtil.parseJWT(jw)); } }
|
运行 main 测试: