加解密JWT

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"));
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值