Java - 如何为多个线程存储不同的cookie

时间:2016-12-26 23:44:17

标签: java http cookies

在我的代码中,我同时在不同的线程中执行不同的HTTP请求。 我注意到每个线程在同一个Cookie管理器中写入/读取混合cookie会导致奇怪的行为(例如,在一个线程中使用某些凭据登录,我在其他线程中看到相同的用户信息)。

我使用这个CookieStore实现尝试了一个独立于线程的解决方案:

public class ThreadLocalCookieStore implements CookieStore {

private final static ThreadLocal<CookieStore> ms_cookieJars = new ThreadLocal<CookieStore>() {
    @Override
    protected synchronized CookieStore initialValue() {
        return (new CookieManager()).getCookieStore(); /* InMemoryCookieStore */
    }
};

public void add(URI uri, HttpCookie cookie) {
    ms_cookieJars.get().add(uri, cookie);
}

public List<HttpCookie> get(URI uri) {
    return ms_cookieJars.get().get(uri);
}

@Override
public List<HttpCookie> getCookies() {
    return ms_cookieJars.get().getCookies();
}

@Override
public List<URI> getURIs() {
    return ms_cookieJars.get().getURIs();
}

@Override
public boolean remove(URI uri, HttpCookie cookie) {
    return ms_cookieJars.get().remove(uri, cookie);
}

@Override
public boolean removeAll() {
    return ms_cookieJars.get().removeAll();
}
}

然后我在任何线程启动之前调用它

CookieHandler.setDefault(new CookieManager(new ThreadLocalCookieStore(), CookiePolicy.ACCEPT_ALL));

但没有改变,我看到一个线程中的cookie与其他线程cookie混合。

我该如何解决这个问题?我在哪里做错了?

0 个答案:

没有答案