• JWT介绍


    JSON Web Token的简称

      用户登录之后,在服务端生成jwt,然后服务端将jwt发送给用户端,然后客户端将jwt存到cookie里面,以后客户端每次向服务端通信都会携带jwt,服务端收到这个jwt就能解析用户的身份

    jwt分成三部分:头部header   数据playload   签名signature,中间用.进行拼接,组成一个字符串

    (1)header是一个json对象使用Base64URL转成的字符串:原始json 包含两个信息,第一个属性type指定token的类型,这里是JWT,最重要的是第二个属性alg,指定第三部分签名signature所使用的算法,默认是HSA256,然后将这个Json对象使用Base64URL转成字符串

    (2)playload也是一个Json对象,用来存放实际需要传递的数据,这个Json对象也会使用Base64URL转成字符串

    (3)signature:使用header里面的加密算法,对header,playload,服务端的密钥(可能是一个字符串,比如说“secret”)使用header中规定的HSA256算法进行加密,得到字符串signature

    这里secret就是服务端的密匙

    最后JWT由以上三部分组成,部分与部分之间用点作为分隔 :

    总结jwt的生成流程:

     

    jwt在项目中怎么使用:

    step1加入jwt依赖

    1. <dependency>
    2. <groupId>com.auth0groupId>
    3. <artifactId>java-jwtartifactId>
    4. <version>4.1.0version>
    5. dependency>

    step2:加密和解密

    1. String signature="admin";
    2. public void jwt()
    3. {
    4. //算出一天有多少毫秒,注意是为了后面设置jwt有效时间做准备
    5. long time=1000*60*60*24;
    6. //创建一个Jwt对象
    7. JwtBuilder jwtBuilder=Jwts.builder();
    8. //设置一个JWT的三部分:Header,Payload,Signature
    9. String jwtToken=jwtBuilder.setHeaderParam("Type","JWT")
    10. .setHeaderParam("alg","HS256")
    11. //上面是设置Header,下面设置payload载荷
    12. .claim("username","tom")//添加payload载荷
    13. .claim("role","tom")
    14. .setSubject("admin-test")//设置子主题,这个可以自己加
    15. .setExpiration(System.currentTimeMillis()+time)//设置有效时间,当前时间+24小时
    16. .setId(UUID.randomUUID().toString())
    17. //接下来设置Signature
    18. .signWith(SignatureAlgorithm.HS256,signature)
    19. .compact();//将三部分用点进行拼接
    20. System.out.println(jwtToken);//可以打印出jwt:XXXXX.XXXXX.XXXXX
    21. }
    22. //对上面生成的jwt进行解密
    23. public void Decoder()
    24. {
    25. String token="XXXXX.XXXXX.XXXXX";
    26. JWTParser jwtParser=Jwts.parser();
    27. jwtParser.setSigningKey(signature).parseClaimsJws(token);
    28. Claims claims=claimsJws.getBody();
    29. //接下来就可以拿到jwt里面Payload负载信息了
    30. claims.get("username");
    31. claims.get("role");
    32. claims.getId();
    33. claims.getSubject();
    34. }

  • 相关阅读:
    由浅入深Dubbo网络通信深入解析
    3、matlab单目相机标定原理、流程及实验
    艾美捷PEG-2000 DMG解决方案
    如何确保ChatGPT在文本生成中遵循道德和伦理准则?
    Apache POI报表统计
    网络层常见协议——IPV4、IPV6、ARP、ICMP、QoS
    Spring 源码阅读 74:事务管理的原理 - BeanFactoryTransactionAttributeSourceAdvisor 分析
    全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型
    在 Python 中使用 Selenium 按文本查找元素
    Python爬虫之Js逆向案例(15)-XX话题批量获取&保存到CSV文件
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/127436653