Я использую HttpComponents 4.5.2 и пытаюсь хранить файлы cookie, поскольку мне нужно использовать их для входа в систему и других запросов. Код работает нормально, пока приложение все еще работает, но проблема заключается в том, что когда я перезапускаю его, файлы cookie, которые должны были храниться в CookieStore, отсутствуют. Вот что я написал:
public static void main( String[] args ) throws InterruptedException
{
RequestConfig globalConfig = RequestConfig.custom()
.setCookieSpec(CookieSpecs.STANDARD).build();
BasicCookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setDefaultRequestConfig(globalConfig)
.setDefaultCookieStore(cookieStore)
.build();
httpclient.start();
login(httpclient, context);
}
public static void login(CloseableHttpAsyncClient httpClient, HttpClientContext context) throws InterruptedException
{
JSONObject json = new JSONObject("{ email : blahblahblah1, password : blahblahblah2 }");
StringEntity requestEntity = new StringEntity(
json.toString(),
ContentType.APPLICATION_JSON);
HttpPost postMethod = new HttpPost("http://localhost:8080/login");
postMethod.setEntity(requestEntity);
final CountDownLatch latch = new CountDownLatch(1);
httpClient.execute(postMethod, context, new FutureCallback<HttpResponse>() {
public void completed(final HttpResponse response) {
latch.countDown();
System.out.println(postMethod.getRequestLine() + "->" + response.getStatusLine());
//System.out.println(context.getCookieStore().getCookies().size());
}
public void failed(final Exception ex) {
latch.countDown();
System.out.println(postMethod.getRequestLine() + "->" + ex);
}
public void cancelled() {
latch.countDown();
System.out.println(postMethod.getRequestLine() + " cancelled");
}
});
latch.await();
}
Я прочитал документацию HttpComponents, и в разделе 3.5 о файлах cookie говорится:
HttpClient может работать с любым физическим представлением постоянного хранилища файлов cookie, которое реализует интерфейс CookieStore. Реализация CookieStore по умолчанию, называемая BasicCookieStore, представляет собой простую реализацию, поддерживаемую java.util.ArrayList. Файлы cookie, хранящиеся в объекте BasicClientCookie, теряются при сборке мусора в объекте-контейнере. При необходимости пользователи могут предоставлять более сложные реализации.
Поэтому мне интересно, остается ли пользователям реализовать какую-то структуру, которая может эффективно хранить файлы cookie, или я что-то упускаю.