基本使用

JSON Web token简称JWT, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全

格式:

  • JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为:A.B.C
  • A由JWT头部信息header加密得到
  • B由JWT用到的身份验证信息json数据加密得到
  • C由A和B加密得到,是校验部分

image-20210714121154190.png
依赖

  1. <dependency>
  2. <groupId>io.jsonwebtoken</groupId>
  3. <artifactId>jjwt</artifactId>
  4. <version>0.9.1</version>
  5. </dependency>
  1. package com.example;
  2. import io.jsonwebtoken.*;
  3. import org.junit.jupiter.api.Test;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. @SpringBootTest
  9. class ApplicationTests {
  10. @Test
  11. void testCreateToken() {
  12. //生成token
  13. //1. 数据准备
  14. Map map = new HashMap();
  15. map.put("id","1");
  16. map.put("mobile","18081037301");
  17. //2. 使用JWT的工具类生成token
  18. long now = System.currentTimeMillis();
  19. String token = Jwts.builder()
  20. .signWith(SignatureAlgorithm.HS512, "itcast") //指定加密算法
  21. .setClaims(map) //写入数据
  22. .setExpiration(new Date(now + 50000)) //失效时间
  23. .compact();
  24. System.out.println(token);
  25. }
  26. @Test
  27. public void testParseToken(){
  28. //解析token
  29. String token = "eyJhbGciOiJIUzUxMiJ9.eyJ"+
  30. "tb2JpbGUiOiIxODA4MTAzNzMwMSIsImlkIjoiMSIsI"+
  31. " mV4cCI6MTY1NTMwMTg3MX0.FEuh2Oit2nET0v4hhmV-q"+
  32. "aYE9rxpRCk3Sskw4az66zHHjd_KCORqLPfTqFPTli7rG_9"+
  33. "CBIHsKXOZ0I3_UEDEKg";
  34. try {
  35. Claims claims = Jwts.parser()
  36. .setSigningKey("itcast")
  37. .parseClaimsJws(token)
  38. .getBody();
  39. Object id = claims.get("id");
  40. Object mobile = claims.get("mobile");
  41. System.out.println(id+"--"+mobile);
  42. }catch (ExpiredJwtException e){
  43. System.out.println("token已过期");
  44. }catch (SignatureException e){
  45. System.out.println("token不合法");
  46. }
  47. }
  48. }