Skip to content

Commit 6fbf2de

Browse files
committed
Don't propagate Authorization header on redirect after NTLM auth, close AsyncHttpClient#867
1 parent 141b65f commit 6fbf2de

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

src/main/java/com/ning/http/client/providers/netty/handler/HttpProtocol.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ private boolean handleHttpResponse(final HttpResponse response,//
434434
|| exitAfterHandling401(channel, future, response, request, statusCode, realm) || //
435435
exitAfterHandling407(channel, future, response, request, statusCode, proxyServer) || //
436436
exitAfterHandling100(channel, future, statusCode) || //
437-
exitAfterHandlingRedirect(channel, future, response, request, statusCode) || //
437+
exitAfterHandlingRedirect(channel, future, response, request, statusCode, realm) || //
438438
exitAfterHandlingConnect(channel, future, request, proxyServer, statusCode, httpRequest) || //
439439
exitAfterHandlingStatus(channel, future, response, handler, status) || //
440440
exitAfterHandlingHeaders(channel, future, response, handler, responseHeaders) || //

src/main/java/com/ning/http/client/providers/netty/handler/Protocol.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@
1616
import static com.ning.http.client.providers.netty.util.HttpUtils.HTTP;
1717
import static com.ning.http.client.providers.netty.util.HttpUtils.WEBSOCKET;
1818
import static com.ning.http.util.AsyncHttpProviderUtils.followRedirect;
19-
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.FOUND;
20-
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.MOVED_PERMANENTLY;
21-
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.SEE_OTHER;
22-
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.TEMPORARY_REDIRECT;
2319
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.*;
20+
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.*;
2421

2522
import org.jboss.netty.channel.Channel;
2623
import org.jboss.netty.handler.codec.http.HttpHeaders;
@@ -34,6 +31,8 @@
3431
import com.ning.http.client.HttpResponseHeaders;
3532
import com.ning.http.client.HttpResponseStatus;
3633
import com.ning.http.client.MaxRedirectException;
34+
import com.ning.http.client.Realm;
35+
import com.ning.http.client.Realm.AuthScheme;
3736
import com.ning.http.client.Request;
3837
import com.ning.http.client.RequestBuilder;
3938
import com.ning.http.client.cookie.Cookie;
@@ -91,13 +90,17 @@ public Protocol(ChannelManager channelManager, AsyncHttpClientConfig config, Net
9190

9291
public abstract void onClose(NettyResponseFuture<?> future);
9392

94-
private FluentCaseInsensitiveStringsMap propagatedHeaders(Request request, boolean switchToGet) {
95-
93+
private FluentCaseInsensitiveStringsMap propagatedHeaders(Request request, Realm realm, boolean switchToGet) {
94+
9695
FluentCaseInsensitiveStringsMap originalHeaders = request.getHeaders();
9796
originalHeaders.remove(HOST);
9897
originalHeaders.remove(CONTENT_LENGTH);
9998
if (switchToGet)
10099
originalHeaders.remove(CONTENT_TYPE);
100+
if (realm != null && realm.getScheme() == AuthScheme.NTLM) {
101+
originalHeaders.remove(AUTHORIZATION);
102+
originalHeaders.remove(PROXY_AUTHORIZATION);
103+
}
101104
return originalHeaders;
102105
}
103106

@@ -106,7 +109,8 @@ protected boolean exitAfterHandlingRedirect(//
106109
final NettyResponseFuture<?> future,//
107110
HttpResponse response,//
108111
Request request,//
109-
int statusCode) throws Exception {
112+
int statusCode,//
113+
Realm realm) throws Exception {
110114

111115
if (followRedirect(config, request) && REDIRECT_STATUSES.contains(statusCode)) {
112116
if (future.incrementAndGetCurrentRedirectCount() >= config.getMaxRedirects()) {
@@ -147,7 +151,7 @@ protected boolean exitAfterHandlingRedirect(//
147151
requestBuilder.addOrReplaceCookie(c);
148152
}
149153

150-
requestBuilder.setHeaders(propagatedHeaders(future.getRequest(), switchToGet));
154+
requestBuilder.setHeaders(propagatedHeaders(future.getRequest(), realm, switchToGet));
151155

152156
final Request nextRequest = requestBuilder.setUrl(newUrl).build();
153157

src/main/java/com/ning/http/client/providers/netty/handler/WebSocketProtocol.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.ning.http.client.AsyncHttpClientConfig;
3333
import com.ning.http.client.HttpResponseHeaders;
3434
import com.ning.http.client.HttpResponseStatus;
35+
import com.ning.http.client.Realm;
3536
import com.ning.http.client.Request;
3637
import com.ning.http.client.providers.netty.NettyAsyncHttpProviderConfig;
3738
import com.ning.http.client.providers.netty.channel.ChannelManager;
@@ -77,13 +78,14 @@ public void handle(Channel channel, NettyResponseFuture<?> future, Object e) thr
7778
HttpResponse response = (HttpResponse) e;
7879
HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response);
7980
HttpResponseHeaders responseHeaders = new NettyResponseHeaders(response.headers());
81+
Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm();
8082

8183
if (exitAfterProcessingFilters(channel, future, handler, status, responseHeaders)) {
8284
return;
8385
}
8486

8587
future.setHttpHeaders(response.headers());
86-
if (exitAfterHandlingRedirect(channel, future, response, request, response.getStatus().getCode()))
88+
if (exitAfterHandlingRedirect(channel, future, response, request, response.getStatus().getCode(), realm))
8789
return;
8890

8991
boolean validStatus = response.getStatus().equals(SWITCHING_PROTOCOLS);

0 commit comments

Comments
 (0)