You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2011/10/11 19:22:08 UTC

svn commit: r1181901 - in /httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http: auth/ client/protocol/ impl/client/

Author: olegk
Date: Tue Oct 11 17:22:08 2011
New Revision: 1181901

URL: http://svn.apache.org/viewvc?rev=1181901&view=rev
Log:
HTTPCLIENT-1129: Do not modify auth state on redirect if not redirecting to another host

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/auth/AuthState.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestProxyAuthentication.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestTargetAuthentication.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/ResponseAuthCache.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpAuthenticator.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/auth/AuthState.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/auth/AuthState.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/auth/AuthState.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/auth/AuthState.java Tue Oct 11 17:22:08 2011
@@ -53,19 +53,15 @@ public class AuthState {
 
     private Queue<AuthOption> authOptions;
 
-    /**
-     * Default constructor.
-     *
-     */
     public AuthState() {
         super();
         this.state = AuthProtocolState.UNCHALLENGED;
     }
 
     /**
-     * Invalidates the authentication state by resetting its parameters.
+     * Resets authentication state.
      */
-    public void invalidate() {
+    public void reset() {
         this.state = AuthProtocolState.UNCHALLENGED;
         this.authOptions = null;
         this.authScheme = null;
@@ -73,6 +69,16 @@ public class AuthState {
         this.credentials = null;
     }
 
+    /**
+     * Invalidates the authentication state by resetting its parameters.
+     *
+     * @deprecated use {@link #reset()}
+     */
+    @Deprecated
+    public void invalidate() {
+        reset();
+    }
+
     @Deprecated
     public boolean isValid() {
         return this.authScheme != null;
@@ -85,7 +91,7 @@ public class AuthState {
      */
     public void setAuthScheme(final AuthScheme authScheme) {
         if (authScheme == null) {
-            invalidate();
+            reset();
             return;
         }
         this.authScheme = authScheme;

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java Tue Oct 11 17:22:08 2011
@@ -58,9 +58,6 @@ abstract class RequestAuthenticationBase
             final HttpContext context) throws HttpException, IOException {
         AuthScheme authScheme = authState.getAuthScheme();
         Credentials creds = authState.getCredentials();
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("Authentication protocol state: " + authState.getState());
-        }
         switch (authState.getState()) {
         case FAILURE:
             return;

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestProxyAuthentication.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestProxyAuthentication.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestProxyAuthentication.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestProxyAuthentication.java Tue Oct 11 17:22:08 2011
@@ -83,6 +83,9 @@ public class RequestProxyAuthentication 
             this.log.debug("Proxy auth state not set in the context");
             return;
         }
+        if (this.log.isDebugEnabled()) {
+            this.log.debug("Proxy auth state: " + authState.getState());
+        }
         process(authState, request, context);
     }
 

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestTargetAuthentication.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestTargetAuthentication.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestTargetAuthentication.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestTargetAuthentication.java Tue Oct 11 17:22:08 2011
@@ -74,6 +74,9 @@ public class RequestTargetAuthentication
             this.log.debug("Target auth state not set in the context");
             return;
         }
+        if (this.log.isDebugEnabled()) {
+            this.log.debug("Target auth state: " + authState.getState());
+        }
         process(authState, request, context);
     }
 

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/ResponseAuthCache.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/ResponseAuthCache.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/ResponseAuthCache.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/ResponseAuthCache.java Tue Oct 11 17:22:08 2011
@@ -76,6 +76,9 @@ public class ResponseAuthCache implement
         HttpHost target = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
         AuthState targetState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
         if (target != null && targetState != null) {
+            if (this.log.isDebugEnabled()) {
+                this.log.debug("Target auth state: " + targetState.getState());
+            }
             if (isCachable(targetState)) {
                 if (target.getPort() < 0) {
                     SchemeRegistry schemeRegistry = (SchemeRegistry) context.getAttribute(
@@ -101,6 +104,9 @@ public class ResponseAuthCache implement
         HttpHost proxy = (HttpHost) context.getAttribute(ExecutionContext.HTTP_PROXY_HOST);
         AuthState proxyState = (AuthState) context.getAttribute(ClientContext.PROXY_AUTH_STATE);
         if (proxy != null && proxyState != null) {
+            if (this.log.isDebugEnabled()) {
+                this.log.debug("Proxy auth state: " + proxyState.getState());
+            }
             if (isCachable(proxyState)) {
                 if (authCache == null) {
                     authCache = new BasicAuthCache();

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java Tue Oct 11 17:22:08 2011
@@ -559,8 +559,18 @@ public class DefaultRequestDirector impl
                         managedConn.markReusable();
                     } else {
                         managedConn.close();
-                        invalidateAuthIfSuccessful(this.proxyAuthState);
-                        invalidateAuthIfSuccessful(this.targetAuthState);
+                        if (proxyAuthState.getState() == AuthProtocolState.SUCCESS
+                                && proxyAuthState.getAuthScheme() != null
+                                && proxyAuthState.getAuthScheme().isConnectionBased()) {
+                            this.log.debug("Resetting proxy auth state");
+                            proxyAuthState.reset();
+                        }
+                        if (targetAuthState.getState() == AuthProtocolState.SUCCESS
+                                && targetAuthState.getAuthScheme() != null
+                                && targetAuthState.getAuthScheme().isConnectionBased()) {
+                            this.log.debug("Resetting target auth state");
+                            targetAuthState.reset();
+                        }
                     }
                     // check if we can use the same connection for the followup
                     if (!followup.getRoute().equals(roureq.getRoute())) {
@@ -1072,16 +1082,14 @@ public class DefaultRequestDirector impl
                     uri.getPort(),
                     uri.getScheme());
 
-            // Unset auth scope
-            targetAuthState.setState(AuthProtocolState.UNCHALLENGED);
-            proxyAuthState.setState(AuthProtocolState.UNCHALLENGED);
-
-            // Invalidate auth states if redirecting to another host
+            // Reset auth states if redirecting to another host
             if (!route.getTargetHost().equals(newTarget)) {
-                targetAuthState.invalidate();
+                this.log.debug("Resetting target auth state");
+                targetAuthState.reset();
                 AuthScheme authScheme = proxyAuthState.getAuthScheme();
                 if (authScheme != null && authScheme.isConnectionBased()) {
-                    proxyAuthState.invalidate();
+                    this.log.debug("Resetting proxy auth state");
+                    proxyAuthState.reset();
                 }
             }
 
@@ -1165,14 +1173,4 @@ public class DefaultRequestDirector impl
     } // abortConnection
 
 
-    private void invalidateAuthIfSuccessful(final AuthState authState) {
-        AuthScheme authscheme = authState.getAuthScheme();
-        if (authscheme != null
-                && authscheme.isConnectionBased()
-                && authscheme.isComplete()
-                && authState.getCredentials() != null) {
-            authState.invalidate();
-        }
-    }
-
 } // class DefaultClientRequestDirector

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpAuthenticator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpAuthenticator.java?rev=1181901&r1=1181900&r2=1181901&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpAuthenticator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpAuthenticator.java Tue Oct 11 17:22:08 2011
@@ -100,12 +100,12 @@ public class HttpAuthenticator {
             case FAILURE:
                 return false;
             case SUCCESS:
-                authState.invalidate();
+                authState.reset();
                 break;
             case CHALLENGED:
                 if (authScheme == null) {
                     this.log.debug("Auth scheme is null");
-                    authState.invalidate();
+                    authState.reset();
                     authState.setState(AuthProtocolState.FAILURE);
                     return false;
                 }
@@ -118,7 +118,7 @@ public class HttpAuthenticator {
                         authScheme.processChallenge(challenge);
                         if (authScheme.isComplete()) {
                             this.log.debug("Authentication failed");
-                            authState.invalidate();
+                            authState.reset();
                             authState.setState(AuthProtocolState.FAILURE);
                             return false;
                         } else {
@@ -126,7 +126,7 @@ public class HttpAuthenticator {
                             return true;
                         }
                     } else {
-                        authState.invalidate();
+                        authState.reset();
                         // Retry authentication with a different scheme
                     }
                 }
@@ -143,7 +143,7 @@ public class HttpAuthenticator {
             if (this.log.isWarnEnabled()) {
                 this.log.warn("Malformed challenge: " +  ex.getMessage());
             }
-            authState.invalidate();
+            authState.reset();
             return false;
         }
     }