锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

JWT简单使用

时间:2022-11-19 02:30:01 df37nc连接器

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包

io.jsonwebtoken

jjwt

0.9.1

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

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章