JWT
java中使用JWT
JWT简介
HEADER:ALGORITHM & TOKEN TYPE
{
"alg": "HS256",
"typ": "JWT"
}
PAYLOAD:DATA
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
VERIFY SIGNATURE
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
SIGNATURE(secret)
)
第一部分称为头部(header), 声明类型以及加密的算法,然后base64加密得到
第二部分称为载荷(payload),存放的就是有效信息,比如签发者,过期时间,标识等, 然后base64加密得到
第三部分称为签证(signature),由 header +payload+secret(盐), 然后base64加密得到
导入MAVEN依赖
jdk8+
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>3.0.0-M4</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>3.0.0-M4</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
测试
public class MyTest
{
private String signature = "corgi";
@Test
public void creatJWT()
{
//用来构建JWT对象
JwtBuilder jwtBuilder = Jwts.builder();
String jwtToken = jwtBuilder
//head
.setHeaderParam("typ", "jwt")
.setHeaderParam("alg", "HS256")
//payload
.claim("uid", "1")
.claim("pass", "1")
.setSubject("corgi")
//有效时常
.setExpiration(new Date(System.currentTimeMillis() + Duration.ofDays(1).toMillis()))
.setId(UUID.randomUUID().toString())
//签名
.signWith(SignatureAlgorithm.HS256, signature)
.compact();
System.out.println(jwtToken);
}
@Test
public void parseJWT()
{
String token = "eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiIxIiwicGFzcyI6IjEiLCJzdWIiOiJjb3JnaSIsImV4cCI6MTY0Nzc0MjMxMywianRpIjoiODNhOGI4ZjAtNjZjYy00MjQ5LWI0NzItMjhhNDdlZGE2MTZiIn0.tBy2vqc7DHkFFxbEFPw1JXSzhCYW7931IBlDfxwYzAs";
JwtParser jwtParser = Jwts.parser();
Jws<Claims> claimsJwt =
jwtParser.setSigningKey(signature).parseClaimsJws(token);
Claims claims = claimsJwt.getBody();
String uid = (String) claims.get("uid");
String pass = (String) claims.get("pass");
System.out.println(uid+","+pass);
}
}
SpringMVC中使用JWT做用户验证
private static final String signature = "corgi**";
public static String getJWT(Integer uid)
{
//用来构建JWT对象
JwtBuilder jwtBuilder = Jwts.builder();
String jwtToken = jwtBuilder
.setHeaderParam("typ", "jwt")
.setHeaderParam("alg", "HS256")
.claim("uid", uid)
.setSubject("test")
.setExpiration(new Date(System.currentTimeMillis() + Duration.ofDays(1).toMillis()))
.setId(UUID.randomUUID().toString())
.signWith(SignatureAlgorithm.HS256, signature)
.compact();
return jwtToken;
}
public static Integer findUid(String token)
{
JwtParser jwtParser = Jwts.parser();
Jws<Claims> claimsJwt =
jwtParser.setSigningKey(signature).parseClaimsJws(token);
Claims claims = claimsJwt.getBody();
Integer uid = (Integer) claims.get("uid");
Date expiration = claims.getExpiration();
System.out.println(uid+","+expiration);
return uid;
}
Last updated