Skip to content

Commit 105f388

Browse files
committed
Enable cookie store at request level
1 parent 72ed867 commit 105f388

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

client/src/main/java/org/asynchttpclient/DefaultRequest.java

+9
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.netty.handler.codec.http.cookie.Cookie;
1818
import io.netty.resolver.NameResolver;
1919
import org.asynchttpclient.channel.ChannelPoolPartitioning;
20+
import org.asynchttpclient.cookie.CookieStore;
2021
import org.asynchttpclient.proxy.ProxyServer;
2122
import org.asynchttpclient.request.body.generator.BodyGenerator;
2223
import org.asynchttpclient.request.body.multipart.Part;
@@ -43,6 +44,7 @@ public class DefaultRequest implements Request {
4344
private final InetAddress localAddress;
4445
private final HttpHeaders headers;
4546
private final List<Cookie> cookies;
47+
private final CookieStore cookieStore;
4648
private final byte[] byteData;
4749
private final List<byte[]> compositeByteData;
4850
private final String stringData;
@@ -70,6 +72,7 @@ public DefaultRequest(String method,
7072
InetAddress localAddress,
7173
HttpHeaders headers,
7274
List<Cookie> cookies,
75+
CookieStore cookieStore,
7376
byte[] byteData,
7477
List<byte[]> compositeByteData,
7578
String stringData,
@@ -95,6 +98,7 @@ public DefaultRequest(String method,
9598
this.localAddress = localAddress;
9699
this.headers = headers;
97100
this.cookies = cookies;
101+
this.cookieStore = cookieStore;
98102
this.byteData = byteData;
99103
this.compositeByteData = compositeByteData;
100104
this.stringData = stringData;
@@ -150,6 +154,11 @@ public HttpHeaders getHeaders() {
150154
public List<Cookie> getCookies() {
151155
return cookies;
152156
}
157+
158+
@Override
159+
public CookieStore getCookieStore() {
160+
return cookieStore;
161+
}
153162

154163
@Override
155164
public byte[] getByteData() {

client/src/main/java/org/asynchttpclient/Request.java

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.netty.handler.codec.http.cookie.Cookie;
2121
import io.netty.resolver.NameResolver;
2222
import org.asynchttpclient.channel.ChannelPoolPartitioning;
23+
import org.asynchttpclient.cookie.CookieStore;
2324
import org.asynchttpclient.proxy.ProxyServer;
2425
import org.asynchttpclient.request.body.generator.BodyGenerator;
2526
import org.asynchttpclient.request.body.multipart.Part;
@@ -80,6 +81,11 @@ public interface Request {
8081
* @return the HTTP cookies
8182
*/
8283
List<Cookie> getCookies();
84+
85+
/**
86+
* @return the cookie store
87+
*/
88+
CookieStore getCookieStore();
8389

8490
/**
8591
* @return the request's body byte array (only non null if it was set this way)

client/src/main/java/org/asynchttpclient/RequestBuilderBase.java

+10
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.netty.resolver.NameResolver;
2424
import io.netty.util.concurrent.ImmediateEventExecutor;
2525
import org.asynchttpclient.channel.ChannelPoolPartitioning;
26+
import org.asynchttpclient.cookie.CookieStore;
2627
import org.asynchttpclient.proxy.ProxyServer;
2728
import org.asynchttpclient.request.body.generator.BodyGenerator;
2829
import org.asynchttpclient.request.body.generator.ReactiveStreamsBodyGenerator;
@@ -68,6 +69,7 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
6869
protected InetAddress localAddress;
6970
protected HttpHeaders headers;
7071
protected ArrayList<Cookie> cookies;
72+
protected CookieStore cookieStore;
7173
protected byte[] byteData;
7274
protected List<byte[]> compositeByteData;
7375
protected String stringData;
@@ -113,6 +115,7 @@ protected RequestBuilderBase(Request prototype, boolean disableUrlEncoding, bool
113115
if (isNonEmpty(prototype.getCookies())) {
114116
this.cookies = new ArrayList<>(prototype.getCookies());
115117
}
118+
this.cookieStore = prototype.getCookieStore();
116119
this.byteData = prototype.getByteData();
117120
this.compositeByteData = prototype.getCompositeByteData();
118121
this.stringData = prototype.getStringData();
@@ -335,6 +338,11 @@ public void resetCookies() {
335338
if (this.cookies != null)
336339
this.cookies.clear();
337340
}
341+
342+
public T setCookieStore(CookieStore cookieStore) {
343+
this.cookieStore = cookieStore;
344+
return asDerivedType();
345+
}
338346

339347
public void resetQuery() {
340348
queryParams = null;
@@ -580,6 +588,7 @@ private RequestBuilderBase<?> executeSignatureCalculator() {
580588
rb.charset = this.charset;
581589
rb.channelPoolPartitioning = this.channelPoolPartitioning;
582590
rb.nameResolver = this.nameResolver;
591+
rb.cookieStore = this.cookieStore;
583592
Request unsignedRequest = rb.build();
584593
signatureCalculator.calculateAndAddSignature(unsignedRequest, rb);
585594
return rb;
@@ -624,6 +633,7 @@ public Request build() {
624633
rb.localAddress,
625634
rb.headers,
626635
cookiesCopy,
636+
rb.cookieStore,
627637
rb.byteData,
628638
rb.compositeByteData,
629639
rb.stringData,

client/src/main/java/org/asynchttpclient/netty/handler/intercept/Interceptors.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,19 @@ public boolean exitAfterIntercept(Channel channel,
7171

7272
// This MUST BE called before Redirect30xInterceptor because latter assumes cookie store is already updated
7373
CookieStore cookieStore = config.getCookieStore();
74-
if (cookieStore != null) {
74+
CookieStore requestCookieStore = request.getCookieStore();
75+
if (cookieStore != null || requestCookieStore != null) {
7576
for (String cookieStr : responseHeaders.getAll(SET_COOKIE)) {
7677
Cookie c = cookieDecoder.decode(cookieStr);
7778
if (c != null) {
7879
// Set-Cookie header could be invalid/malformed
79-
cookieStore.add(future.getCurrentRequest().getUri(), c);
80+
if (cookieStore != null) {
81+
cookieStore.add(future.getCurrentRequest().getUri(), c);
82+
}
83+
84+
if (requestCookieStore != null) {
85+
cookieStore.add(request.getUri(), c);
86+
}
8087
}
8188
}
8289
}

client/src/main/java/org/asynchttpclient/netty/handler/intercept/Redirect30xInterceptor.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public boolean exitAfterHandlingRedirect(Channel channel,
9191
boolean keepBody = statusCode == TEMPORARY_REDIRECT_307 || statusCode == PERMANENT_REDIRECT_308 || (statusCode == FOUND_302 && config.isStrict302Handling());
9292

9393
final RequestBuilder requestBuilder = new RequestBuilder(switchToGet ? GET : originalMethod)
94+
.setCookieStore(request.getCookieStore())
9495
.setChannelPoolPartitioning(request.getChannelPoolPartitioning())
9596
.setFollowRedirect(true)
9697
.setLocalAddress(request.getLocalAddress())
@@ -126,7 +127,8 @@ else if (request.getBodyGenerator() != null)
126127

127128
LOGGER.debug("Redirecting to {}", newUri);
128129

129-
CookieStore cookieStore = config.getCookieStore();
130+
CookieStore cookieStore =
131+
request.getCookieStore() != null ? request.getCookieStore() : config.getCookieStore();
130132
if (cookieStore != null) {
131133
// Update request's cookies assuming that cookie store is already updated by Interceptors
132134
List<Cookie> cookies = cookieStore.get(newUri);

0 commit comments

Comments
 (0)