<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JWT令牌

      Maven坐標(biāo)

      <dependency> 
          <groupId>io.jsonwebtoken</groupId> 
          <artifactId>jjwt</artifactId> 
          <version>${jjwt}</version> 
      </dependency>
      

      生成jwt

      • 指定簽名的時(shí)候使用的簽名算法

      • SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

      1. 構(gòu)建 JWT:使用 Jwts.builder() 創(chuàng)建一個(gè) JWT 構(gòu)建器對(duì)象,并進(jìn)行三項(xiàng)核心設(shè)置:

        • 設(shè)置自定義聲明:.setClaims(claims) 將用戶提供的自定義信息添加到令牌中

        • 設(shè)置簽名信息:.signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8)) 使用指定算法和密鑰生成簽名

        編碼處理:密鑰在使用前通過(guò) getBytes(StandardCharsets.UTF_8) 轉(zhuǎn)換為 UTF-8 編碼的字節(jié)數(shù)組,確??缙脚_(tái)一致性。

        • 設(shè)置過(guò)期時(shí)間:.setExpiration(exp) 設(shè)置令牌的有效期
      2. 生成最終令牌:通過(guò) builder.compact() 方法將構(gòu)建的 JWT 對(duì)象序列化為最終的字符串形式。

      /**
       * 生成jwt
       * 使用Hs256算法, 私匙使用固定秘鑰
       *
       * @param secretKey jwt秘鑰
       * @param ttlMillis jwt過(guò)期時(shí)間(毫秒)
       * @param claims    設(shè)置的信息
       * @return
       */
      public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
          // 指定簽名的時(shí)候使用的簽名算法,也就是header那部分
          SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
      
          // 生成JWT的時(shí)間
          long expMillis = System.currentTimeMillis() + ttlMillis;
          Date exp = new Date(expMillis);
      
          // 設(shè)置jwt的body
          JwtBuilder builder = Jwts.builder()
                  // 如果有私有聲明,一定要先設(shè)置這個(gè)自己創(chuàng)建的私有的聲明,這個(gè)是給builder的claim賦值,一旦寫(xiě)在標(biāo)準(zhǔn)的聲明賦值之后,就是覆蓋了那些標(biāo)準(zhǔn)的聲明的
                  .setClaims(claims)
                  // 設(shè)置簽名使用的簽名算法和簽名使用的秘鑰
                  .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
                  // 設(shè)置過(guò)期時(shí)間
                  .setExpiration(exp);
      
          return builder.compact();
      }
      

      解析jwt

      1. 創(chuàng)建解析器: 通過(guò) Jwts.parser() 創(chuàng)建一個(gè) JWT 解析器實(shí)例

      2. 設(shè)置驗(yàn)證密鑰: 使用 setSigningKey() 方法設(shè)置用于驗(yàn)證簽名的密鑰,這里同樣將密鑰轉(zhuǎn)換為 UTF-8 編碼的字節(jié)數(shù)組

      3. 解析并驗(yàn)證令牌: 調(diào)用 parseClaimsJws(token) 方法解析令牌,這個(gè)方法會(huì)自動(dòng)驗(yàn)證:

        • 令牌的簽名是否有效(使用提供的密鑰)

        • 令牌是否已過(guò)期

        • 令牌的格式是否正確

      4. 獲取聲明信息: 通過(guò) getBody() 方法獲取令牌中包含的所有聲明信息

      /**
       * Token解密
       *
       * @param secretKey jwt秘鑰 此秘鑰一定要保留好在服務(wù)端, 不能暴露出去, 否則sign就可以被偽造, 如果對(duì)接多個(gè)客戶端建議改造成多個(gè)
       * @param token     加密后的token
       * @return
       */
      public static Claims parseJWT(String secretKey, String token) {
          // 得到DefaultJwtParser
          Claims claims = Jwts.parser()
                  // 設(shè)置簽名的秘鑰
                  .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                  // 設(shè)置需要解析的jwt
                  .parseClaimsJws(token).getBody();
          return claims;
      }
      

      映射配置

      sky:
        jwt:
          # 設(shè)置jwt簽名加密時(shí)使用的秘鑰
          admin-secret-key: itcast
          # 設(shè)置jwt過(guò)期時(shí)間
          admin-ttl: 7200000
          # 設(shè)置前端傳遞過(guò)來(lái)的令牌名稱
          admin-token-name: token
          # 登錄用戶jwt的配置信息
          user-secret-key: itcast
          user-ttl: 7200000
          # 設(shè)置前端傳遞過(guò)來(lái)的令牌名稱
          user-token-name: authentication
      

      創(chuàng)建一個(gè)JwtProperties類(lèi)進(jìn)行配置映射

      @Component
      @ConfigurationProperties(prefix = "sky.jwt")
      @Data
      public class JwtProperties {
      
          /**
           * 管理端員工生成jwt令牌相關(guān)配置
           */
          private String adminSecretKey;
          private long adminTtl;
          private String adminTokenName;
      
          /**
           * 用戶端微信用戶生成jwt令牌相關(guān)配置
           */
          private String userSecretKey;
          private long userTtl;
          private String userTokenName;
      
      }
      
      posted @ 2025-10-25 23:57  Nobody_Cares  閱讀(34)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产成人精品午夜在线观看| 国产精品亚洲欧美大片在线看 | 文山县| 妓女妓女一区二区三区在线观看| 亚洲无人区码一二三四区| 国产青榴视频在线观看| 布拖县| 欧美性xxxxx极品| 最新中文乱码字字幕在线| 嘉义县| 啊灬啊灬啊灬快灬高潮了电影片段| 婷婷六月综合缴情在线| 少妇粗大进出白浆嘿嘿视频| 日本一区二区不卡精品| 亚洲一本二区偷拍精品| 精品久久人人妻人人做精品| 国产激情国产精品久久源| 蜜臀av久久国产午夜| 国产人妻精品无码av在线| 日韩一区二区三区精彩视频| 韩国免费a级毛片久久| 久久婷婷成人综合色| 成人午夜福利视频一区二区| 亚洲另类丝袜综合网| 如东县| 人人妻人人做人人爽| 欧美肥老太wbwbwbb| 小嫩批日出水无码视频免费| 欧美成人无码a区视频在线观看| japanese人妻中文字幕| 四虎影院176| 中文字幕亚洲国产精品| 国产精品高清国产三级囯产AV| 亚洲国产成人无码影院| 欧美一本大道香蕉综合视频| 一区二区三区四区高清自拍 | 亚洲国产成人AⅤ片在线观看| 色综合天天综合天天更新| 亚洲欧美高清在线精品一区二区| 久久久国产一区二区三区四区小说 | 国产精品午夜精品福利|