资讯详情

JWT简单使用

1.什么是JWT?

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

2. JWT组成格式?

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

:(具体算法对称不对称加密不作为研究内容)

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

{

"typ":"jwt"

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

}

然后做头base64加密(可对称解密)构成第一部分.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

{

"username":"zhangsan",

"name":"张三",

...

}

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

eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwibmFtZSI6IuW8oOS4iSIsImFnZSI6MTgsInNleCI6IuWlsyIsImV4cCI6MTY0NzE0NTA1MSwianRpIjoiMTIxMjEyMTIxMiJ9

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

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

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

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwibmFtZSI6IuW8oOS4iSIsImFnZSI6MTgsInNleCI6IuWlsyIsImV4cCI6MTY0NzE0NTA1MSwianRpIjoiMTIxMjEyMTIxMiJ9.5tmHCpcsS_VuZ2_z5Rydf2OpsviBGwB-fJE5aS7gKqE

3.流程

4. 怎么使用JWT

:注:使用的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);  } 

标签: df37nc连接器

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

锐单商城 - 一站式电子元器件采购平台