JWT-token

打印 上一主题 下一主题

主题 515|帖子 515|积分 1545

JWT

JWT有什么用?
JSON Web Token,通过数字签名的方式,以JSON对象为载体,后续每个请求都包含JWT,系统在每次处理用户请求的之前,都要先进行JWT安全校验,通过之后再进行处理。
JWT的组成
JWT由3部分组成,用.拼接
xxxxx.yyyyy.zzzzz
这3部分分别是:

  • Heard
  1. {
  2.     'typ':'JWT',
  3.     'alg':'HS256'
  4. }
复制代码

  • Payload
  1. {
  2.     "sub":'1234567890',
  3.     "name":'json',
  4.     "admin":true
  5. }
复制代码

  • Signature
  1. var encodedString = base64UrlEncode(header)+'.'+base64UrlEncode(payload);
  2. var signature =HMACSHA256(encodedString,'secret')
复制代码
配置依赖
  1. <dependency>
  2.     <groupId>io.jsonwebtoken</groupId>
  3.     <artifactId>jjwt</artifactId>
  4.     <version>0.9.1</version>
  5. </dependency>
复制代码
测试:
  1. @Test
  2. public void jwt(){
  3.     JwtBuilder jwtBuilder = Jwts.builder();
  4.     String jwtToken =jwtBuilder
  5.             //hearder
  6.             .setHeaderParam("typ","JWT")
  7.             .setHeaderParam("alg","HS256")
  8.             //payload
  9.             .claim("username","tom")
  10.             .claim("role","admin")
  11.             .setSubject("admin-test")
  12.             .setExpiration(new Date(System.currentTimeMillis()+time))
  13.             .setId(UUID.randomUUID().toString())
  14.             //signature
  15.             .signWith(SignatureAlgorithm.HS256,signature)
  16.             //拼接
  17.             .compact();
  18.     System.out.println(jwtToken);
  19. }
复制代码
解析:
  1. @Test
  2. public void testJwt(){
  3.     String token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE2NTQwNzIzMjksImp0aSI6IjIwZGY4NGQwLWZiODUtNGU0My04OWI4LWU5MWNjZWFkYTQ0MSJ9.ly3EZwqWHbUbdo7S4uHDRYo7husHDzoYS8g5AyA8BqM";
  4.     JwtParser jwtParser = Jwts.parser();
  5.     Jws<Claims> claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);
  6.     Claims claims = claimsJws.getBody();
  7.     System.out.println(claims.get("username"));
  8.     System.out.println(claims.get("role"));
  9.     System.out.println(claims.getId());
  10.     //签名
  11.     System.out.println(claims.getSubject());
  12.     System.out.println(claims.getExpiration());
  13. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表