@@ -254,13 +254,11 @@ private boolean exitAfterHandling401(//
254
254
.build ();
255
255
}
256
256
257
- Realm nr = newRealm ;
258
- final Request nextRequest = new RequestBuilder (future .getRequest ()).setHeaders (request .getHeaders ()).setRealm (nr ).build ();
257
+ final Request nextRequest = new RequestBuilder (future .getRequest ()).setHeaders (request .getHeaders ()).setRealm (newRealm ).build ();
259
258
260
259
logger .debug ("Sending authentication to {}" , request .getUri ());
261
260
if (future .isKeepAlive ()) {
262
261
if (HttpHeaders .isTransferEncodingChunked (response )) {
263
- // we must first drain the channel, let's use a fresh one for performing auth
264
262
Channels .setAttribute (channel , new Callback (future ) {
265
263
public void call () throws IOException {
266
264
requestSender .drainChannelAndExecuteNextRequest (channel , future , nextRequest );
@@ -295,8 +293,8 @@ private boolean exitAfterHandling100(final Channel channel, final NettyResponseF
295
293
}
296
294
297
295
private boolean exitAfterHandling407 (//
298
- Channel channel ,//
299
- NettyResponseFuture <?> future ,//
296
+ final Channel channel ,//
297
+ final NettyResponseFuture <?> future ,//
300
298
HttpResponse response ,//
301
299
Request request ,//
302
300
int statusCode ,//
@@ -319,10 +317,12 @@ private boolean exitAfterHandling407(//
319
317
if (!proxyAuthHeaders .contains ("Kerberos" ) && ntlmAuthenticate != null ) {
320
318
newRealm = ntlmProxyChallenge (ntlmAuthenticate , request , proxyServer , requestHeaders , realm , future , true );
321
319
// SPNEGO KERBEROS
320
+
322
321
} else if (negociate ) {
323
322
newRealm = kerberosChallenge (channel , proxyAuthHeaders , request , proxyServer , requestHeaders , realm , future , true );
324
323
if (newRealm == null )
325
324
return true ;
325
+
326
326
} else {
327
327
newRealm = new Realm .RealmBuilder ().clone (realm )//
328
328
.setScheme (realm .getAuthScheme ())//
@@ -334,10 +334,24 @@ private boolean exitAfterHandling407(//
334
334
.build ();
335
335
}
336
336
337
- future .setReuseChannel (true );
338
- future .setConnectAllowed (true );
339
- Request nextRequest = new RequestBuilder (future .getRequest ()).setHeaders (requestHeaders ).setRealm (newRealm ).build ();
340
- requestSender .sendNextRequest (nextRequest , future );
337
+ final Request nextRequest = new RequestBuilder (future .getRequest ()).setHeaders (request .getHeaders ()).setRealm (newRealm ).build ();
338
+
339
+ logger .debug ("Sending authentication to {}" , request .getUri ());
340
+ if (future .isKeepAlive ()) {
341
+ future .setReuseChannel (true );
342
+ if (HttpHeaders .isTransferEncodingChunked (response )) {
343
+ Channels .setAttribute (channel , new Callback (future ) {
344
+ public void call () throws IOException {
345
+ requestSender .drainChannelAndExecuteNextRequest (channel , future , nextRequest );
346
+ }
347
+ });
348
+ } else {
349
+ requestSender .sendNextRequest (nextRequest , future );
350
+ }
351
+ } else {
352
+ channelManager .closeChannel (channel );
353
+ requestSender .sendNextRequest (nextRequest , future );
354
+ }
341
355
return true ;
342
356
}
343
357
}
0 commit comments