最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用會(huì)話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證

 更新時(shí)間:2021年03月12日 09:19:37   作者:Kang_kin  
這篇文章主要介紹了如何使用會(huì)話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

HTTP是無(wú)狀態(tài)協(xié)議,用于傳輸數(shù)據(jù)。它啟用了客戶端和服務(wù)器端>之間的通信。它最初是為了在Web瀏覽器和Web服務(wù)器之間建立連接而建立的。比如在網(wǎng)上購(gòu)物,我們添加一些商品,例如。耳機(jī)到我們的購(gòu)物車(chē),然后,我們繼續(xù)尋找其他項(xiàng)目,在此期間,我們希望在執(zhí)行任何其他任務(wù)是存儲(chǔ)購(gòu)物車(chē)項(xiàng)目的狀態(tài)且不丟失它們。這意味著我們希望在整個(gè)購(gòu)物過(guò)程中記住我們的狀態(tài)。由于HTTP是無(wú)狀態(tài)協(xié)議,因此要克服問(wèn)題,我們可以使用會(huì)話或者令牌

1、基于會(huì)話的身份驗(yàn)證

在JSON Web令牌出現(xiàn)之前,我們主要使用這種身份驗(yàn)證。在這種身份驗(yàn)證中,服務(wù)器負(fù)責(zé)身份驗(yàn)證,客戶端不知道發(fā)送請(qǐng)求后服務(wù)器端會(huì)發(fā)生什么。

那么什么是會(huì)話Cookie?

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

用戶在網(wǎng)絡(luò)瀏覽器上登錄網(wǎng)站發(fā)生什么。例如,用戶登錄后,服務(wù)器 將為該用戶創(chuàng)建一個(gè)會(huì)話并將該會(huì)話數(shù)據(jù)存儲(chǔ)在服務(wù)器內(nèi)存中。當(dāng)用戶在網(wǎng)站上執(zhí)行某些活動(dòng)時(shí),會(huì)創(chuàng)建一個(gè)會(huì)話ID,該會(huì)話ID存儲(chǔ)在客戶端瀏覽器的cookie中。在用戶提出的每個(gè)請(qǐng)求中,cookie都將隨之發(fā)送。然后,當(dāng)用戶最初登錄時(shí),服務(wù)器可以使用存儲(chǔ)在服務(wù)器內(nèi)存中的會(huì)話數(shù)據(jù)來(lái)驗(yàn)證Cookie上的會(huì)話數(shù)據(jù)。當(dāng)用戶從網(wǎng)站注銷(xiāo)時(shí),該會(huì)話數(shù)據(jù)將從數(shù)據(jù)庫(kù)和服務(wù)器內(nèi)存中刪除。

2、基于令牌的身份驗(yàn)證

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

當(dāng)用戶發(fā)送帶有登錄詳細(xì)信息的用戶身份驗(yàn)證請(qǐng)求時(shí),服務(wù)器將以JSON WEB TOKENS(JWT)的形式創(chuàng)建一個(gè)加密的令牌,并將其發(fā)送回客戶端。當(dāng)客戶端收到令牌時(shí),這意味著該用戶以通過(guò)身份驗(yàn)證,可以使用客戶端執(zhí)行任何活動(dòng)。

JWT通常存儲(chǔ)在客戶端的localstorage中,當(dāng)用戶從服務(wù)器請(qǐng)求任何數(shù)據(jù)或?qū)υ摼W(wǎng)站執(zhí)行任何活動(dòng)時(shí),JWT將作為該用戶的唯一密鑰發(fā)送。因此,當(dāng)服務(wù)器接收到該請(qǐng)求時(shí),它將針對(duì)每個(gè)請(qǐng)求驗(yàn)證JWT僅是該特定用戶,然后將所需的響應(yīng)發(fā)送回客戶端。

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

用戶狀態(tài)存儲(chǔ)在客戶端JWT中。當(dāng)用戶注銷(xiāo)時(shí),令牌將從客戶端(localStorage)中刪除。因此,大多數(shù)數(shù)據(jù)存儲(chǔ)在客戶端,并且可以直接訪問(wèn),而不是向服務(wù)器發(fā)送請(qǐng)求。

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

JWT結(jié)構(gòu):
xxxxx.yyyyy.zzzzz

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

JWT已對(duì)先前的標(biāo)頭和有效負(fù)載進(jìn)行了編碼,并用一個(gè)密鑰進(jìn)行簽名,如下

哪個(gè)更好用?

在現(xiàn)代Web應(yīng)用程序中,JWT被廣泛使用,因?yàn)樗纳炜s性優(yōu)于基于會(huì)話的cookie,因?yàn)榱钆拼鎯?chǔ)在客戶端,而會(huì)話使用服務(wù)器內(nèi)存來(lái)存儲(chǔ)用戶數(shù)據(jù),這可能是一個(gè)大問(wèn)題。大量用戶一次訪問(wèn)應(yīng)用程序。由于JWT是隨著每個(gè)請(qǐng)求一起發(fā)送的,而且包含所有用戶信息,因此即使對(duì)JWT進(jìn)行了編碼,也有必要在JWT中使用必要的信息,并且應(yīng)避免使用敏感信息或者將其加密以防止安全攻擊。

沒(méi)有固定的方法可以始終使用,它取決于開(kāi)發(fā)人員和要求的類(lèi)型,以找出在哪種情況下需要使用哪種方法。

3、jwt實(shí)現(xiàn)登錄

 //定義JWT的有效時(shí)長(zhǎng)七天
 private static final long EXPIRE_TIME = 60 * 1000 * 60 * 24 * 7;
 //簽發(fā)人
 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) {

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

   //創(chuàng)建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;
  }
 }

 /**
  * 驗(yàn)證token
  *
  * @param token
  */
 public static boolean verify(String token, String userNo) {
  try {
   //設(shè)置加密算法
   JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SING)).withClaim("userNo", userNo).build();
   //校驗(yàn)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, "請(qǐng)輸入用戶名,用戶名不能為空");
  }
  if (empPassword == null || "".equals(empPassword)) {
   return ResultUtil.error(103, "請(qǐng)輸入密碼,密碼不能為空");
  }
  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, "密碼錯(cuò)誤,獲取token失敗");
  }
  //正常token
  String token = JwtUtils.sign(empNo, empPassword);
  emp.setToken(token); 
  return ResultUtil.success(200, "登錄成功", emp);
 }

以上就是如何使用會(huì)話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證的詳細(xì)內(nèi)容,更多關(guān)于使用會(huì)話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot整合liteflow的實(shí)現(xiàn)示例

    springboot整合liteflow的實(shí)現(xiàn)示例

    本文主要介紹了在Spring Boot項(xiàng)目中整合Liteflow規(guī)則引擎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • java修飾類(lèi)的使用方法以及使用技巧(分享)

    java修飾類(lèi)的使用方法以及使用技巧(分享)

    下面小編就為大家?guī)?lái)一篇java修飾類(lèi)的使用方法以及使用技巧(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決

    Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決

    這篇文章主要介紹了Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流

    Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流

    這篇文章主要介紹了Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流,本文詳細(xì)的介紹了Sentinel組件的用法以及接口限流,感興趣的可以了解一下
    2019-04-04
  • Spring Boot2配置服務(wù)器訪問(wèn)日志過(guò)程解析

    Spring Boot2配置服務(wù)器訪問(wèn)日志過(guò)程解析

    這篇文章主要介紹了Spring Boot2配置服務(wù)器訪問(wèn)日志過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java注解Annotation解析

    Java注解Annotation解析

    這篇文章主要為大家詳細(xì)介紹了Java注解Annotation,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 一篇文章帶你入門(mén)Java變量及整形

    一篇文章帶你入門(mén)Java變量及整形

    這篇文章主要介紹了簡(jiǎn)單了解JAVA變量類(lèi)型及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析

    關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析

    這篇文章主要給大家介紹了關(guān)于Java中靜態(tài)代碼塊執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • JAVA正則表達(dá)式校驗(yàn)qq號(hào)碼的方法

    JAVA正則表達(dá)式校驗(yàn)qq號(hào)碼的方法

    Java作為一種開(kāi)發(fā)語(yǔ)言,有許多值得推薦的地方,但是它一直以來(lái)沒(méi)有自帶對(duì)正則表達(dá)式的支持。下面小編給大家?guī)?lái)了JAVA正則表達(dá)式校驗(yàn)qq號(hào)碼的方法,需要的朋友參考下吧
    2018-04-04
  • Java 如何同時(shí)返回多個(gè)不同類(lèi)型

    Java 如何同時(shí)返回多個(gè)不同類(lèi)型

    這篇文章主要介紹了Java 同時(shí)返回多個(gè)不同類(lèi)型的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

图们市| 井陉县| 平陆县| 锡林浩特市| 迭部县| 保亭| 陆河县| 木兰县| 仁布县| 泰来县| 广南县| 怀宁县| 兴文县| 个旧市| 台北县| 华安县| 桂林市| 塘沽区| 阿城市| 讷河市| 舒城县| 闽侯县| 泰安市| 台中市| 尚志市| 行唐县| 梅河口市| 绥德县| 富宁县| 建水县| 兴海县| 健康| 巍山| 阿勒泰市| 富川| 无极县| 白水县| 舟曲县| 弥勒县| 项城市| 宁波市|