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

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

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

      JSON Web Token(JWT)鑒權機制

      前言
      說道會話跟蹤,可能會想到Cookie和Session,而這兩個都有一定的缺陷,如Cookie,隨瀏覽器自動發送,易受 CSRF 攻擊,在移動端支持較差;Session依賴服務器本地存儲或共享存儲。這時候JWT出現了,其實出現挺久了,我也會挺久了,但是前段時間找實習,沒時間寫。

      之前的做法是用戶在登錄后,獲得一個token,服務器將這個token與其用戶id綁定存儲在數據庫中,下一次用戶訪問網站時,會在header中攜帶該信息,服務端在獲得該信息后,會與與數據庫中的進行比較。

      這個做法有一個明顯的缺陷就是,用戶體量大的話,數據庫將會有很大的壓力。
      這時候JWT的出現就避免了這個缺點,減輕了數據庫的壓力。
      正文
      JWT由三部分組成,標頭 (Header)、有效載荷 (Payload) 和 簽名 (Signature)。

      標頭包含令牌的類型(JWT)和所使用的簽名算法(如 HMAC SHA256)。

      {
      "alg": "HS256",
      "typ": "JWT"
      }
      

      將其進行base64編碼

      有效載荷包含聲明(claims),即有關實體和其他數據,如過期時間等

       {
        "name": "Tom",
        "id": 5
        }
      

      同樣后需要對其進行base64編碼

      簽名包含base64加密后的header+"."+base64加密后的Payload連接組成的字符串和簽名算法(頭部和載荷,簽名密鑰)構造的簽名

      JWT代碼

      
      import io.jsonwebtoken.Claims;
      import io.jsonwebtoken.JwtBuilder;
      import io.jsonwebtoken.Jwts;
      import io.jsonwebtoken.SignatureAlgorithm;
      import java.nio.charset.StandardCharsets;
      import java.util.Date;
      import java.util.Map;
      
      public class JwtUtil {
          /**
           * 生成jwt
           * 使用Hs256算法, 
           *
           * @param secretKey jwt秘鑰
           * @param ttlMillis jwt過期時間(毫秒)
           * @param claims  設置的信息
           * @return
           */
          public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
              // 指定簽名的時候使用的簽名算法,也就是header那部分
              SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
      
              // 生成JWT的時間
              long expMillis = System.currentTimeMillis() + ttlMillis;
              Date exp = new Date(expMillis);
      
              // 設置jwt的body
              JwtBuilder builder = Jwts.builder()
                      // 如果有私有聲明,一定要先設置這個自己創建的私有的聲明,這個是給builder的claim賦值,一旦寫在標準的聲明賦值之后,就是覆蓋了那些標準的聲明的
                      .setClaims(claims)
                      // 設置簽名使用的簽名算法和簽名使用的秘鑰
                      .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
                      // 設置過期時間
                      .setExpiration(exp);
              return builder.compact();
          }
      
          /**
           * Token解密
           *
           * @param secretKey jwt秘鑰 
           * @param token  加密后的token
           * @return
           */
          public static Claims parseJWT(String secretKey, String token) {
              // 得到DefaultJwtParser
              Claims claims = Jwts.parser()
                      // 設置簽名的秘鑰
                      .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                      // 設置需要解析的jwt
                      .parseClaimsJws(token).getBody();
              return claims;
          }
      
      }
      
      posted @ 2025-07-15 17:31  Lxx-123  閱讀(42)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品道一区二区三区| 无码一区中文字幕| 久久人与动人物a级毛片 | 国产性一交一乱一伦一色一情 | 国产综合久久99久久| 狠狠综合久久综合88亚洲| 成年女人片免费视频播放A| 女人的天堂A国产在线观看| 97国产成人无码精品久久久| 精品国产一区二区三区香| 成人国产精品中文字幕| 黑人异族巨大巨大巨粗| 久久人妻夜夜做天天爽| 精品亚洲综合一区二区三区| 欧洲熟妇色自偷自拍另类| 亚洲精品久久久蜜桃| 日韩精品国产精品十八禁| aaa少妇高潮大片免费看| 九九热精品免费视频| 一区二区三区四区激情视频| 狠狠色丁香婷婷综合尤物| 久久香蕉国产线看观看猫咪av| av无码一区二区大桥久未| 国语自产精品视频在线看| 国产在线午夜不卡精品影院| 亚洲va久久久噜噜噜久久狠狠| 欧美人与禽2o2o性论交| 精品亚洲一区二区三区在线播放| 亚洲av中文一区二区| 国产精品一区二区久久岳| 中文字幕人妻无码一区二区三区| 国产成人精品亚洲精品日日| 国产亚洲视频免费播放| 中文文字幕文字幕亚洲色| 亚洲综合伊人五月天中文| 四虎国产精品永久在线| 大港区| 国产精品老熟女一区二区| 亚洲ΑV久久久噜噜噜噜噜| 国产一区在线播放av| 亚洲人成电影在线播放|