【JWT】 jwt基础

1.什么是jwt
把安全数据封装起来 ,以json字符串的格式进行传输

public class Test {

    @org.junit.Test
    public void jwt() {
        //jwt -->三部分组成
        long time = 1000 * 60 * 60 * 24;
        String key = "admin";

        JwtBuilder builder = Jwts.builder();
        //1. header:一般由两部分组成,一部分是声明类型,一部分是声明加密的算法。
        String compact = builder.setHeaderParam("type", "JWT")
                .setHeaderParam("alg", "HS256")
        //2. payload(载荷):存放需要传输的信息,一般存放用户的相关数据,比如用户的ID,用户的权限等。
                .claim("username", "tom")
                .claim("role", "admin")
                .setSubject("admin-test")
                .setExpiration(new Date(System.currentTimeMillis() + time))
                .setId(UUID.randomUUID().toString())
        //3. signature:是将header和payload进行加密生成的签名,防止数据在传输过程中被篡改。
                .signWith(SignatureAlgorithm.HS256, key)
                .compact();

        System.out.println(compact);

        JwtParser parser = Jwts.parser();
        Jws<Claims> claimsJws = parser.setSigningKey(key).parseClaimsJws(compact);
        Claims body = claimsJws.getBody();
        System.out.println(body.get("username"));
        System.out.println(body.getSubject());
    }

    @org.junit.Test
    public void Login() {
        //模拟前端携带的账号和密码访问
        String name = "admin";
        String password = "123456";
        JwtBuilder builder = Jwts.builder();
        String key = name;

        String token = null;

        if (name.equals("admin") && password.equals("123456")) {
            token = builder.setHeaderParam("type", "JWT")
                    .setHeaderParam("alg", "HS256")
                    .claim("name", name)
                    .claim("password", password)
                    .setSubject(name)
                    .setId(password)
                    .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
                    .signWith(SignatureAlgorithm.HS256, key)
                    .compact();
            System.out.println(token);
        } else {
            System.out.println("错误");
        }


        System.out.println("访问其他请求(请携带token):");
        String next = token;

        if (next.equals(token)) {
            System.out.println("获取token成功,正在解析获取id");
            Jws<Claims> claimsJws = Jwts.parser().setSigningKey(key).parseClaimsJws(token);
            System.out.println(claimsJws.getBody().getId());
            System.out.println(claimsJws.getBody().get("name"));
            System.out.println(claimsJws.getBody().get("password"));
            System.out.println(claimsJws.getBody().getSubject());
        } else {
            System.out.println("未带token,不可访问");
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值