Java, пусть CookieHandler работает только на одном экземпляре - PullRequest
4 голосов
/ 28 декабря 2010

Я не знаю, как CookieHandler работает в масштабе всей системы, я просмотрел источник CookieHandler, но не нашел больше информации, кроме методов get / set. Где соединения TCP / HTTP используют экземпляр CookieHandler, который я установил с помощью

CookieHandler.setDefault(...)

К какому исходному файлу я должен обратиться? URLConnection & HttpURLConnection не имеет к этому никакого отношения.

Помогите, заранее спасибо. <ч /> Edit: Можно ли применить CookieHandler только к одному экземпляру, в котором вызывается setDefault.

Ответы [ 2 ]

1 голос
/ 11 апреля 2012

Javadoc для java.net.CookieManager дает довольно хороший обзор того, как CookieHandler подходит.

0 голосов
/ 15 мая 2014

Я получил его с помощью

private static class DelegatingCookieManager extends CookieManager {
    @Override public void setCookiePolicy(CookiePolicy cookiePolicy) {
        delegate.get().setCookiePolicy(cookiePolicy);
    }

    @Override public CookieStore getCookieStore() {
        return delegate.get().getCookieStore();
    }

    @Override public Map<String, List<String>> get(
            URI uri, Map<String, List<String>> requestHeaders)
            throws IOException {
        return delegate.get().get(uri, requestHeaders);
    }

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

, который устанавливается глобально

static {
    CookieHandler.setDefault(new DelegatingCookieManager());
}

, но не имеет состояния и делегирует

private static final ThreadLocal<CookieManager> delegate =
     new ThreadLocal<CookieManager>();

, которыйсоздается в классе, где он используется

private final CookieManager ownCookieManager = new CookieManager();

как

delegate.set(ownCookieManager);
doRequest();
...