簡體   English   中英

序列化 CookieManager/CookieStore

[英]Serializing a CookieManager/CookieStore

我正在制作一個訪問網站的 Java 程序,這取決於分發 cookie 以便我可以登錄。我發現使用 CookieManager 將允許我的 URLConnection 至少收集這些 cookie,但是我怎么有當java程序關閉時,這些cookies仍然存在嗎?

我已經有一個管理一些變量序列化的類,那么我如何在這個序列化過程中實現 cookie? 默認情況下,Java 顯然不允許我序列化 CookieManagers 和 CookieStores。

您可以擴展 CookieManager 並使其實現可序列化。 然后使用您剛剛創建的擴展 CookieManager。

例如:

public class NewCookieManager extends CookieManager implements Serializable{
  //Code here...
}

您可以使用 cookie 管理器將所有 cookie 標頭保存在可序列化的映射中。 您可以調用put方法使其再次解析 cookie 標頭。

public class KeepHeadersCookieManager extends CookieManager {

    private Map<URI, Map<String, List<String>>> cookieHeaders = new HashMap<>();

    public KeepHeadersCookieManager() {
    }

    public KeepHeadersCookieManager(Map<URI, Map<String, List<String>>> cookieHeaders) throws IOException {
        for (URI u : cookieHeaders.keySet()) {
            put(u, cookieHeaders.get(u));
        }
    }

    @Override
    public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException {
        super.put(uri, responseHeaders);

        Map<String, List<String>> uriCookiesHeaders = cookieHeaders.computeIfAbsent(uri, u -> new HashMap<>());
        List<String> uriSetCookieHeaders = uriCookiesHeaders.computeIfAbsent("Set-Cookie", h -> new ArrayList<>());
        List<String> uriSetCookie2Headers = uriCookiesHeaders.computeIfAbsent("Set-Cookie2", h -> new ArrayList<>());
        List<String> setCookieHeaders = responseHeaders.getOrDefault("Set-Cookie", new ArrayList<>());
        List<String> setCookie2Headers = responseHeaders.getOrDefault("Set-Cookie2", new ArrayList<>());
        uriSetCookieHeaders.addAll(setCookieHeaders);
        uriSetCookie2Headers.addAll(setCookie2Headers);
    }

    public Map<URI, Map<String, List<String>>> getCookieHeaders() {
        return cookieHeaders;
    }
}

這樣,您可以調用 getCookieHeaders() 來獲取所有 cookie 標頭的可序列化映射,並將其傳遞回構造函數以從先前狀態初始化 cookie 管理器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM