一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 如何使用會話Cookie和Java實現JWT身份驗證

如何使用會話Cookie和Java實現JWT身份驗證

2021-08-23 14:24Kang_kin Java教程

這篇文章主要介紹了如何使用會話Cookie和Java實現JWT身份驗證,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

HTTP是無狀態協議,用于傳輸數據。它啟用了客戶端和服務器端>之間的通信。它最初是為了在Web瀏覽器和Web服務器之間建立連接而建立的。比如在網上購物,我們添加一些商品,例如。耳機到我們的購物車,然后,我們繼續尋找其他項目,在此期間,我們希望在執行任何其他任務是存儲購物車項目的狀態且不丟失它們。這意味著我們希望在整個購物過程中記住我們的狀態。由于HTTP是無狀態協議,因此要克服問題,我們可以使用會話或者令牌

1、基于會話的身份驗證

在JSON Web令牌出現之前,我們主要使用這種身份驗證。在這種身份驗證中,服務器負責身份驗證,客戶端不知道發送請求后服務器端會發生什么。

那么什么是會話Cookie?

由于客戶端未指定Expires(過期時間)或Max-Age(最大上限)指令,因此在客戶端關閉時將其刪除。但是,Web瀏覽器可能會使用會話還原,這會使大多數會話Cookie永久保持狀態,就像從未關閉過瀏覽器一樣。

如何使用會話Cookie和Java實現JWT身份驗證

用戶在網絡瀏覽器上登錄網站發生什么。例如,用戶登錄后,服務器 將為該用戶創建一個會話并將該會話數據存儲在服務器內存中。當用戶在網站上執行某些活動時,會創建一個會話ID,該會話ID存儲在客戶端瀏覽器的cookie中。在用戶提出的每個請求中,cookie都將隨之發送。然后,當用戶最初登錄時,服務器可以使用存儲在服務器內存中的會話數據來驗證Cookie上的會話數據。當用戶從網站注銷時,該會話數據將從數據庫和服務器內存中刪除。

2、基于令牌的身份驗證

在基于令牌的身份驗證中,我們使用JWT(JSON Web Tokens)進行身份驗證。這是RESTful API的廣泛使用方法。

如何使用會話Cookie和Java實現JWT身份驗證

當用戶發送帶有登錄詳細信息的用戶身份驗證請求時,服務器將以JSON WEB TOKENS(JWT)的形式創建一個加密的令牌,并將其發送回客戶端。當客戶端收到令牌時,這意味著該用戶以通過身份驗證,可以使用客戶端執行任何活動。

JWT通常存儲在客戶端的localstorage中,當用戶從服務器請求任何數據或對該網站執行任何活動時,JWT將作為該用戶的唯一密鑰發送。因此,當服務器接收到該請求時,它將針對每個請求驗證JWT僅是該特定用戶,然后將所需的響應發送回客戶端。

localStorage.setItem("key", "value");

用戶狀態存儲在客戶端JWT中。當用戶注銷時,令牌將從客戶端(localStorage)中刪除。因此,大多數數據存儲在客戶端,并且可以直接訪問,而不是向服務器發送請求。

JSON WEB TOKENS由(.)連接的三個部分組成:
1.標頭
2.有效載荷
3.簽名

JWT結構:
xxxxx.yyyyy.zzzzz

輸出包含三個由點分割的Base64-URL字符串,可以在HTML和HTTP環境中輕松傳遞這些字符串,與基于XML的標準(例如SAML)相比,它更緊湊。

JWT已對先前的標頭和有效負載進行了編碼,并用一個密鑰進行簽名,如下

如何使用會話Cookie和Java實現JWT身份驗證

哪個更好用?

在現代Web應用程序中,JWT被廣泛使用,因為它的伸縮性優于基于會話的cookie,因為令牌存儲在客戶端,而會話使用服務器內存來存儲用戶數據,這可能是一個大問題。大量用戶一次訪問應用程序。由于JWT是隨著每個請求一起發送的,而且包含所有用戶信息,因此即使對JWT進行了編碼,也有必要在JWT中使用必要的信息,并且應避免使用敏感信息或者將其加密以防止安全攻擊。

沒有固定的方法可以始終使用,它取決于開發人員和要求的類型,以找出在哪種情況下需要使用哪種方法。

3、jwt實現登錄

 //定義JWT的有效時長七天
 private static final long EXPIRE_TIME = 60 * 1000 * 60 * 24 * 7;
 //簽發人
 private static String ISSUER = "K_ang";
 /*秘鑰*/
 private static final String SING = K*&^A%$#N@!G;
 /**
  * 生成令牌
  *
  * @param map
  * @return
  */
 public static String getToken(Map<String, String> map) {

  //設置過期時間
  Date date = null;
  try {
   date = new Date(System.currentTimeMillis() + EXPIRE_TIME);

   //創建token
   JWTCreator.Builder builder = JWT.create()
     .withIssuer(ISSUER)
     .withExpiresAt(date);
   //添加信息
   map.forEach((k, v) -> {
    builder.withClaim(k, v);
   });
   return builder.sign(Algorithm.HMAC256(SING));
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }

 /**
  * 驗證token
  *
  * @param token
  */
 public static boolean verify(String token, String userNo) {
  try {
   //設置加密算法
   JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SING)).withClaim("userNo", userNo).build();
   //校驗token
   DecodedJWT jwt = verifier.verify(token);
   return true;
  } catch (Exception e) {
   return false;
  }


 }

 /**
  * 獲取token信息方法
  *
  * @param
  * @return
  */
 public static String getTokenInfo(String token) {
  DecodedJWT decode = JWT.decode(token);
  return decode.getClaim("userNo").asString();
 }
}
@PostMapping("/login")
 public Result login(@PathParam("empNo") String empNo, @PathParam("empPassword") String empPassword) {
  if (empNo == null || "".equals(empNo)) {
   return ResultUtil.error(103, "請輸入用戶名,用戶名不能為空");
  }
  if (empPassword == null || "".equals(empPassword)) {
   return ResultUtil.error(103, "請輸入密碼,密碼不能為空");
  }
  Emp emp = empService.login(empNo, empPassword);
  if (emp == null) {
   return ResultUtil.error(103, "用戶不存在,獲取token失敗");
  }
  if (emp.getEmpPassword() == null || !emp.getEmpPassword().equals(empPassword)) {
   return ResultUtil.error(103, "密碼錯誤,獲取token失敗");
  }
  //正常token
  String token = JwtUtils.sign(empNo, empPassword);
  emp.setToken(token); 
  return ResultUtil.success(200, "登錄成功", emp);
 }

以上就是如何使用會話Cookie和Java實現JWT身份驗證的詳細內容,更多關于使用會話Cookie和Java實現JWT身份驗證的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/kangkin/p/14513358.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九精品国产亚洲A片无码 九九99热久久999精品 | 毛片资源站 | 久久re热在线视频精6 | 无人区在线观看免费观看 | 亚洲午夜精品久久久久久抢 | 成人免费网站视频ww | 日韩免费在线观看 | 美女视频一区二区三区在线 | 成人网址大全 | 国产91精品久久久久久 | 亚洲阿v天堂2018在线观看 | 日本天堂视频在线观看 | 俄罗斯引擎首页进入 | 天天乐影院 | 色婷婷综合缴情综六月 | 无套暴躁白丝秘书 | 免费视频片在线观看 | 亚欧洲乱码专区视频 | 欧美一级久久久久久久大片 | 无人在线视频高清免费播放 | 9久热这里只有精品免费 | 明星ai智能人脸替换造梦在线播放 | 高h生子双性美人受 | 欧美国产日韩1区俺去了 | 99久久精品国产片久人 | 日本视频在线观看播放 | 99这里只有精品在线 | 亚州日韩精品AV片无码中文 | 思思玖玖玖在线精品视频 | 大杳蕉在线影院在线播放 | 亚洲天堂网站 | 美女口述又粗又大感觉 | 色老板在线视频 | 四虎在线永久免费视频网站 | 精品日韩欧美一区二区三区在线播放 | 好吊操这里有精品 | 久久精品视频在线看 | 特级av毛片免费观看 | 国产精品刺激好大好爽视频 | 亚洲成av人在线视 | 激情三级hd中文字幕 |