解決tomcat服務器在response中寫入cookie帶引號問題

在工作中碰到一個關於cookie帶引號的問題,記錄一下。

業務流程:

1.頁面通過request訪問服務器地址A;

2.在controller層接到請求並向response中寫入cookie:nameCookie;

3.然後response重定向到新的地址B;

4.新的地址的頁面中獲取cookie的value,並作爲憑據請求服務器的另一個地址C。

發現問題:

公司環境爲本地環境dev、測試環境qa、仿真環境sim和生產環境online。項目在dev,qa,sim環境運行均可正常運行,但在上到生產環境後無法正常訪問地址C。

排查步驟:

1.排查代碼是否合併成功,沒問題;

2.排查發版包代碼是否包含最新代碼,沒問題;

3.瀏覽器檢查cookie,發現online環境的cookie的value有雙引號,但是dev,qa,sim環境均沒有雙引號;

4.刪除online環境中cookie的雙引號刷新頁面,可正常訪問地址C,由此定位到問題是cookie的雙引號導致。

查找文獻:

此部分感謝https://www.jianshu.com/p/9242a8a84f73的作者憨人Zoe。簡述就是返回的cookie的value中帶有“=”,導致低版本的tomcat會給cookie的value弄上雙引號buff加持。

解決流程:

1.找運維同學檢查online環境和其他測試環境的tomcat版本,發現onlilne環境是8.0.53,其他環境是8.5.38;

2.剝離online一臺機器T,在tomcat的catalina.properties中添加如下配置

org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true #cookie的value中允許使用=符號

3.重啓機器T,使用ip訪問地址A,跳轉到新的頁面後cookie中沒有nameCookie(原因是因爲ip訪問無法獲得cookie的域);

4.所有機器均加上

org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true,

org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true,

org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V1=true

5.重啓所有機器(低峯訪問時段,有上線策略),使用域名訪問地址A,跳轉到新的頁面後cookie的value中還是帶有雙引號;

6.online所有機器升級tomcat版本至8.5.38;

7.重啓所有機器,使用域名訪問地址A,成功跳轉到地址B,並訪問到地址C的資源,成功。

總結

1.環境問題就直接統一環境,不要搞其他的有的沒得配置。一步到位,免得折騰。

2.暴露出公司的項目部署環境不規範問題,要加強項目部署環境的一致性,特別是生產環境online和仿真環境sim的一致性;

3.在本次問題的解決過程中流程是很不規範的,測試解決效果應該在測試環境中進行,而不是直接在生產環境進行嘗試。我的本次行動是在晚上低峯並且有公司上線策略的支持下進行的(我是不會告訴你我是在半夜兩點拖着運維同學一起搞這個事情的 zzz);

4.中間加參數沒有成功的原因爲也是沒搞懂,如果有大佬知曉的話,可以在評論區指導一下,不勝感激,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章