亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:86日期:2022-08-15 14:21:52

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

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

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

那么什么是會話Cookie?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

哪個更好用?

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

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

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

//定義JWT的有效時長七天 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è)置過期時間 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, '請輸入用戶名,用戶名不能為空'); } 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實(shí)現(xiàn)JWT身份驗(yàn)證的詳細(xì)內(nèi)容,更多關(guān)于使用會話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 一男一女野外大黄毛片 | 欧美激情级毛片 | 国内小情侣一二三区在线视频 | 国产精品麻豆99久久 | 特及毛片 | 黄页网址大全免费观看不用 | 国产一区二区三区在线看 | 播放中国女人毛片一级带 | 久久六月丁香婷婷婷 | mm在线| 狠狠色丁香婷婷久久综合2021 | 亚洲天天综合色制服丝袜在线 | 特一级黄 | 黑人巨大vsさとう遥希 | 亚洲黄色免费观看 | 久久99国产精一区二区三区 | 久久www免费人成看国产片 | 欧美在线黄色 | 免费一级在线观看 | 亚洲综合色视频 | 国产免费看视频 | 久久精品国产久精国产果冻传媒 | 亚1洲二区三区四区免费 | 美女精品在线 | 91精选国产 | 精品女同一区二区三区免费站 | 成人黄色在线视频 | 日本大片免a费观看视频+播放器 | 亚洲欧美一区二区三区国产精品 | 亚洲精品国产成人专区 | 国产色 | 国产欧美日韩视频怡春院 | 久久综合九色综合精品 | 国产一区二区三区日韩欧美 | 欲色综合 | 国产精品视频网址 | 亚洲永久免费视频 | 亚洲国产精品a一区二区三区 | 成人午夜精品网站在线观看 | 乱色美www女麻豆 | 国产精品免费视频一区二区 |