import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.impl.Base64Codec;
import org.junit.jupiter.api.Test;
import java.util.Date;
public class TestJwt {
@Test
public void test() {
//创建一个JwtBuilder对象
JwtBuilder jwtBuilder = Jwts.builder()
//声明的标识{"jti":"888"}
.setId("888")
//主体,用户{"sub":"Rose"}
.setSubject("Rose")
//创建日期{"ita":"kerwinxx"}
.setIssuedAt(new Date())
//签名手段,参数1:算法,参数2:盐
.signWith(SignatureAlgorithm.HS256, "kerwin");
//获取jwt的token
String token = jwtBuilder.compact();
System.out.println(token);
//三部分的base64解密
System.out.println("--------------------");
String[] split = token.split("\\.");
System.out.println(Base64Codec.BASE64.decodeToString(split[0]));
System.out.println(Base64Codec.BASE64.decodeToString(split[1]));
//无法解密
System.out.println(Base64Codec.BASE64.decodeToString(split[2]));
}
@Test
public void testParseToken(){
//token
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiJSb3NlIiwiaWF0IjoxNjQ3MzMzMDIwfQ._neVMSef5v3TcX0LXkBFzr6ymD0xPSc9z_6JjsudZdM";
//解析token获取负载中的声明对象
Claims claims = Jwts.parser()
.setSigningKey("kerwin")
.parseClaimsJws(token)
.getBody();
//打印声明的属性
System.out.println("id:"+claims.getId());
System.out.println("subject:"+claims.getSubject());
System.out.println("issuedAt:"+claims.getIssuedAt());
}
@Test
public void testTokenExpir() {
//创建一个JwtBuilder对象
JwtBuilder jwtBuilder = Jwts.builder()
//声明的标识{"jti":"888"}
.setId("888")
//主体,用户{"sub":"Rose"}
.setSubject("Rose")
//创建日期{"ita":"kerwinxx"}
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis()+60*1000*5))
//签名手段,参数1:算法,参数2:盐
.signWith(SignatureAlgorithm.HS256, "kerwin");
//获取jwt的token
String token = jwtBuilder.compact();
System.out.println(token);
/**
*
*/
}
@Test
public void testValidToken(){
//token
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiJSb3NlIiwiaWF0IjoxNjQ3MzMzMDIwfQ._neVMSef5v3TcX0LXkBFzr6ymD0xPSc9z_6JjsudZdM";
//解析token获取负载中的声明对象
Claims claims = Jwts.parser()
.setSigningKey("kerwin")
.parseClaimsJws(token)
.getBody();
System.out.println("claims = " + claims);
}
/**
* 自定义token 数据
*/
@Test
public void testDiyToken() {
//创建一个JwtBuilder对象
JwtBuilder jwtBuilder = Jwts.builder()
//声明的标识{"jti":"888"}
.setId("888")
//主体,用户{"sub":"Rose"}
.setSubject("Rose")
//创建日期{"ita":"kerwinxx"}
.setIssuedAt(new Date())
.claim("userId",10)
.claim("uname","admin")
//签名手段,参数1:算法,参数2:盐
.signWith(SignatureAlgorithm.HS256, "kerwin");
//获取jwt的token
String token = jwtBuilder.compact();
System.out.println(token);
}
/**
* 获取自定义数据
*/
@Test
public void testGetDiyToken(){
//token
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiJSb3NlIiwiaWF0IjoxNjI5MDgzODk4LCJ1c2VySWQiOjEwLCJ1bmFtZSI6ImFkbWluIn0.VgMJO0zbl9Fy_DHZHo12d_255VXXs0c7RJ9xJhyWK2k";
//解析token获取负载中的声明对象
Claims claims = Jwts.parser()
.setSigningKey("kerwin")
.parseClaimsJws(token)
.getBody();
System.out.println("id:"+claims.getId());
System.out.println("subject:"+claims.getSubject());
System.out.println("issuedAt:"+claims.getIssuedAt());
System.out.println(claims.get("userId"));
System.out.println(claims.get("uname"));
}
}
加解密JWT
于 2022-03-15 17:05:03 首次发布