JWT简单使用

1.什么是JWT?


 json web token,通过数字签名的方式,以json为载体,在不同的服务之间安全的传输信息的一种技术,替代了cookie和session,保证数据共享和数据的安全性

2. JWT的组成格式?


由Header(头信息),PayLoad (用户信息),signature(签名)三个部分组成

2.1 Header头信息主要声明加密算法:(具体算法对称不对称加密不作为研究内容)

 通常直接使用 HMAC HS256这样的算法

{

 "typ":"jwt"

 "alg":"HS256" //加密算法

}

然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

2.2 PayLoad(数据)

{

 "username":"zhangsan",

 "name":"张三",

 ...

}

对其进行base64加密,得到Jwt的第二部分。

eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwibmFtZSI6IuW8oOS4iSIsImFnZSI6MTgsInNleCI6IuWlsyIsImV4cCI6MTY0NzE0NTA1MSwianRpIjoiMTIxMjEyMTIxMiJ9

2.3 Signature 自定义信息

这个签证信息由三部分组成(由加密后的Header,加密后的PayLoad,加密后的签名三部分组成)

  • header (base64后的)
  • payload (base64后的)
  • secret

base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐加密,然后就构成了jwt的第三部分,每个部分直接使用"."来进行拼接

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwibmFtZSI6IuW8oOS4iSIsImFnZSI6MTgsInNleCI6IuWlsyIsImV4cCI6MTY0NzE0NTA1MSwianRpIjoiMTIxMjEyMTIxMiJ9.5tmHCpcsS_VuZ2_z5Rydf2OpsviBGwB-fJE5aS7gKqE

3.流程

4. 怎么使用JWT 

引入Pom依赖:注:使用的jdk1.8版本 高版本会报缺少jar包

<dependency>

      <groupId>io.jsonwebtoken</groupId>

      <artifactId>jjwt</artifactId>

      <version>0.9.1</version>

    </dependency>

@Test
//加密
public void jwt(){
    //定义数据
    HashMap map = new HashMap();
    map.put("userId",String.valueOf(123456));
    map.put("phone",String.valueOf(15051369));
    long l = System.currentTimeMillis();
    //创建Jwt 三部分
    JwtBuilder builder = Jwts.builder();
                        //设置密钥
    String token = builder.signWith(SignatureAlgorithm.HS256, "xiaowang")
            //设置数据
            .setClaims(map)
            //设置失效时间
            .setExpiration(new Date(l + 10000))
            .compact();

    System.out.println(token);
}

@Test
//解密
public void parse(){
       //获取解密器
       //解密器需要获取我们本地的秘钥 signature将生成的token进行解密,拿到一个Claims
       //核心是获取payLoad里的用户信息调用getBody方法获取payLoad
    Jws<Claims> claimsJws = Jwts.parser().setSigningKey("xiaowang")
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJwaG9uZSI6IjE1MDUxMzY5IiwiZXhwIjoxNjU4ODIxOTkxLCJ1c2VySWQiOiIxMjM0NTYifQ.yw4h6zfHUW4gdkXvZwQZFvGC94TqT371DF-n-DB_OXw");

    //得到数据信息
    String userId = (String) claimsJws.getBody().get("userId");
    String phone = (String) claimsJws.getBody().get("phone");
    System.out.println(userId + "====" + phone);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值