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

RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

 更新時間:2023年07月06日 10:54:29   作者:畢小寶  
這篇文章主要介紹了RestTemplate發(fā)送請求時Cookie的影響及注意事項說明,具有很好的參考價值,希望對大家有所幫助。

背景

一個基于 SpringCloud 的多服務(wù)項目中,服務(wù)間調(diào)用通過 Spring 的 RestTemplate 實現(xiàn),后臺模塊 A 有一個定期清理無效業(yè)務(wù)數(shù)據(jù)的任務(wù),它調(diào)用 Web 服務(wù) B 的 API 時,竟然一直出現(xiàn) Token 已過期問題。

技術(shù)背景

  • Web 服務(wù)權(quán)限認證使用 Token ,登錄校驗成功后,刷新 Token 并調(diào)用 response.addCookie 返回給調(diào)用方——瀏覽器或者內(nèi)部服務(wù)。
  • Web 服務(wù)的攔截器,它提取 Token 的順序是:請求參數(shù)、Cookie、Header,然后驗證 Token 的有效性。校驗通過,刷新 Token 到響應(yīng)對象的 Cookie 中。
  • Token 有效期限 30 分鐘。
  • 后臺定時任務(wù)模塊 A 每小時調(diào)用一次模塊 B 的的 API 。

對于 Web 服務(wù)模塊 B 來說,請求來源有用戶瀏覽器和內(nèi)部服務(wù) A ,Token 校驗通過后會刷新并設(shè)置響應(yīng)對象的 Cookie 中,而 Cookie 又會在下次請求時發(fā)送給服務(wù)器。

各服務(wù)穩(wěn)定運行后,定時任務(wù) A 調(diào)用服務(wù) B 的 API,從來都沒有成功過。

后臺服務(wù)調(diào)用時 Cookie 失效問題

問題描述

后臺服務(wù) A 在調(diào)用 B 的 某API 時,雖然會生成新 Token 信息并設(shè)置到頭域,但是除了應(yīng)用啟動時成功調(diào)用了一次,其他周期的調(diào)用都出現(xiàn)了 Token 已過期問題。

問題分析

分析整個認證過程,發(fā)現(xiàn)在 Web 的攔截器中,如果檢測到了內(nèi)部服務(wù)調(diào)用,會刷新 Token 信息并返回給 RestTemplate 對象,而且攔截器提取 Token 的順序是:請求參數(shù)、Cookie、Header。

// 請求參數(shù)
String token = request.getParameter("t");
// Cookie
if (StringUtils.isEmpty(token)) {
? ? Cookie[] cs = request.getCookies();
? ? if (cs != null) {
? ? ? ? for (Cookie c : cs) {
? ? ? ? ? ? if ("t".equals(c.getName())) {
? ? ? ? ? ? ? ? token = c.getValue();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
?//Header
if (StringUtils.isEmpty(token)) {
? ? token = request.getHeader("t");
}

問題癥結(jié)

后臺模塊 A 一小時執(zhí)行一次,每次調(diào)用使用 Spring 托管的 RestTemplate 單例對象發(fā)送請求給 B 時,它包含了上次請求收到的 Cookie 信息。

雖然同時生成了 Token 的頭域信息,但是在 Web 端優(yōu)先校驗了 Cookie ,因此認證結(jié)果始終是無效 Token ,請求被拒絕。

啟示錄

我從互聯(lián)網(wǎng)上得到的最好的經(jīng)驗之一,就是永遠不要復(fù)制和粘貼不是自己編寫的代碼。

如果你一定要復(fù)制,那就照著它逐字輸入,逼著自己思考,這些代碼實際上是什么意思。

這是昨天看科技周刊印象深刻的一句話,本文的問題雖然不是復(fù)制粘貼導(dǎo)致的,但它別人的代碼、別人的思想,我沒有深刻分析過。

當(dāng)我臨時救火被分派解決這個問題時,簡單看了下代碼分析如下:

  • 后端服務(wù)設(shè)置 Token 到了頭域
  • 而 Web 模塊只從 Cookie 和請求參數(shù)中獲取 Token ,沒有從 Header 中獲取

想當(dāng)然地以為,只要加上從 Header 中獲取就好了,而且陰差陽錯的加在了 Cookie 獲取的后面,所以問題還是沒有解決。

反復(fù)加日志,打印各個信息的 Token ,發(fā)現(xiàn)解析時用的 Token 跟頭域不一樣, Token 失效時間也很規(guī)律,就是上次定時任務(wù)的調(diào)用時間。突然意識到了,Web 服務(wù)用的 Token 跟我想的不一樣,誰把 Token 給改了?

答案是 Cookie,RestTemplate 竟然在發(fā)送請求時把上次的 Cookie 給帶上了。30分鐘的有效期,下一輪定時任務(wù)執(zhí)行時,早就是失效了啊。

RestTemplate 注意事項

用 RestTemplate 進行服務(wù)調(diào)用時,最好清掉 Cookie 信息,

一來避免本文出現(xiàn)的情況;

二來,它作為Spring 托管的單例,如果訪問的是不同系統(tǒng)的 API ,勢必會出現(xiàn) Cookie 混淆、失效的問題!

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring?boot集成loback日志配置的示例代碼

    spring?boot集成loback日志配置的示例代碼

    這篇文章主要介紹了spring?boot集成loback日志配置的示例代碼,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 詳解spring boot使用@Retryable來進行重處理

    詳解spring boot使用@Retryable來進行重處理

    本篇文章主要介紹了詳解spring boot使用@Retryable來進行重處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • JAVA IO的3種類型區(qū)別解析

    JAVA IO的3種類型區(qū)別解析

    這篇文章主要介紹了JAVA IO的3種類型解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Win10安裝Maven與環(huán)境變量配置過程

    Win10安裝Maven與環(huán)境變量配置過程

    本文介紹Maven的安裝與配置方法,涵蓋下載、環(huán)境變量設(shè)置、本地倉庫及鏡像配置,指導(dǎo)如何在IDEA中正確配置Maven,適用于Java及其他語言項目的構(gòu)建與依賴管理
    2025-08-08
  • springboot下使用shiro自定義filter的個人經(jīng)驗分享

    springboot下使用shiro自定義filter的個人經(jīng)驗分享

    這篇文章主要介紹了springboot下使用shiro自定義filter的個人經(jīng)驗,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JAVASE系統(tǒng)實現(xiàn)抽卡功能

    JAVASE系統(tǒng)實現(xiàn)抽卡功能

    這篇文章主要為大家詳細介紹了JAVASE系統(tǒng)實現(xiàn)抽卡功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • jsp、struts、spring、mybatis實現(xiàn)前端頁面功能模塊化拆分的方案

    jsp、struts、spring、mybatis實現(xiàn)前端頁面功能模塊化拆分的方案

    這篇文章主要介紹了 jsp、struts、spring、mybatis實現(xiàn)前端頁面功能模塊化拆分的方案,非常不錯,需要的朋友參考下
    2017-01-01
  • JavaWeb實現(xiàn)文件上傳功能詳解

    JavaWeb實現(xiàn)文件上傳功能詳解

    這篇文章主要介紹了JavaWeb實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • springboot亂碼問題排查思路解析

    springboot亂碼問題排查思路解析

    這篇文章主要為大家介紹了springboot亂碼問題排查思路解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • SPRING管理XML方式過程解析

    SPRING管理XML方式過程解析

    這篇文章主要介紹了SPRING管理XML方式過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論

金寨县| 泗洪县| 白城市| 怀安县| 海宁市| 扶绥县| 四川省| 佳木斯市| 浮山县| 万盛区| 美姑县| 马龙县| 淳安县| 威海市| 晋城| 新源县| 安康市| 富宁县| 饶平县| 墨竹工卡县| 视频| 即墨市| 平度市| 永登县| 察雅县| 墨脱县| 洛隆县| 黎平县| 西乡县| 香港 | 安塞县| 安泽县| 积石山| 忻州市| 游戏| 海口市| 清流县| 陇南市| 丽水市| 体育| 苏尼特左旗|