[英]Cookie in string format converts to bad cookie upon passing through cookie manager
我正在測試 CookieManager 的一些用法,我注意到當我將反序列化的 cookie 傳遞給 CookieHandler 時,它用於將其放入 cookie 管理器的格式與我傳遞的不同。
示例代碼:
import org.springframework.http.HttpHeaders;
import java.io.IOException;
import java.net.*;
import java.util.*;
public class MainTest {
public static void main(String[] args) throws URISyntaxException, IOException {
HttpHeaders headers = new HttpHeaders();
headers.add("Set-Cookie", "TEST=%7B%22keyType%22%3A%22abc%22%2C%22keyValue%22%3A%221.0%22%7D;Max-Age=600;Path=/;Version=0;SameSite=None");
headers.add(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.9");
System.out.println("headers-> " + headers);
String uri = "http://test.com/test";
CookieManager cookieHandler = new CookieManager();
CookieHandler.setDefault(cookieHandler);
URI uri1 = new URI(uri);
CookieHandler.getDefault().put(uri1,headers);
Map<String, List<String>> cookies = CookieHandler.getDefault().get(uri1,headers);
System.out.println("returned-> " + cookies);
}
}
這是 output:
headers-> [Set-Cookie:"TEST=%7B%22keyType%22%3A%22abc%22%2C%22keyValue%22%3A%221.0%22%7D;Max-Age=600;Path=/;Version=0;SameSite=None", Accept-Language:"en-US,en;q=0.9"]
returned-> {Cookie=[$Version="1", TEST="%7B%22keyType%22%3A%22abc%22%2C%22keyValue%22%3A%221.0%22%7D";$Path="/";$Domain="test.com"]}
為什么格式會變? 即使我也傳遞了一個序列化的cookie,它也會改變
您的“返回”僅顯示來自java.net.HttpCookie#toString
的字符串表示,文檔說它會堅持 RFC 2965:
//copied from java.net.HttpCookie
private String toRFC2965HeaderString() {
StringBuilder sb = new StringBuilder();
sb.append(getName()).append("=\"").append(getValue()).append('"');
if (getPath() != null)
sb.append(";$Path=\"").append(getPath()).append('"');
if (getDomain() != null)
sb.append(";$Domain=\"").append(getDomain()).append('"');
if (getPortlist() != null)
sb.append(";$Port=\"").append(getPortlist()).append('"');
return sb.toString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.