Tomcat之cookie中的雙引號

問題描述

使用tomcat部署服務後,點擊F12,通過瀏覽器發現cookie中的path值(/)被加上雙引號。

臨時解決

通過百度,找到了臨時的解決方案,鏈接如下:
https://blog.csdn.net/uniquewonderq/article/details/88421737

問題分析

但是爲什麼需要設置這個參數呢?
1. 之前的tomcat版本(7.0.90)和這次的版本(7.0.91)之間在cookie的實現上應該沒有什麼大的修改。
2. web應用前後使用的是同一套代碼,說明不是web應用的問題。
3. 查詢tomcat配置,發現多了一個配置(org.apache.catalina. STRICT_SERVLET_COMPLIANCE = true) ,查詢tomcat官網,發現設置該參數後會導致web應用出現一些問題,如下:
參數說明
且設置該參數後,會導致如下的參數也被設置爲true(這裏只關注與cookie有關的參數)。
在這裏插入圖片描述

源碼分析

看參數描述不是很懂這個參數的具體影響,爲什麼會導致path的“/”被加上了雙引號,於是去看了tomcat對cookie值設置的相關實現。如下是ServerCookie的appendCookieValue方法:

Cookie初始化時默認version = 0,ALLOW_HTTP_SEPARATORS_IN_V0默認爲false,此時查看CookieSupport.isHttpToken()方法的相關實現,其中返回值是通過CookieSupport類的static塊確定的,如下所示:
在這裏插入圖片描述
如果沒有設置FWD_SLASH_IS_SEPARATOR 的值,該參數將會與org.apache.catalina. STRICT_SERVLET_COMPLIANCE 屬性的值一致。
在這裏插入圖片描述
如上圖所示,當FWD_SLASH_IS_SEPARATOR屬性被設置爲true後,“/”就被確定爲分隔符,從而導致此時的cookie默認爲version 1。如下,此時在判斷是否需要加雙引號時,滿足isHttpToken爲true且ALLOW_HTTP_SEPARATORS_IN_V0默認爲false,此時就會給“/”加上雙引號了。
在這裏插入圖片描述

解決方案

1.將org.apache.catalina. STRICT_SERVLET_COMPLIANCE 屬性設置爲false,tomcat默認也是爲false。
2.如果需要強行將org.apache.catalina. STRICT_SERVLET_COMPLIANCE 屬性設置爲true,則可以在catalina.properties文件中,將ALLOW_HTTP_SEPARATORS_IN_V0屬性爲true。

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