The source changes look fine to me Mark.

I think you may the the wrong bug number, or synopsis. The changes are in the basic and negotiate authenticators used by the Http client, HttpURLConnection. Anyway, the source changes look good to me.

I can sponsor this for you.

-Chris.

On 11/01/2013 18:14, Mark Sheppard wrote:

A review request for JDK-8005406: HTTP server implementation should use Base64 
API

Description:
jdk8 has java.util.Base64 to define a standard API for base64 
encoding/decoding. It would be good to investigate whether this API could be 
used in the com.sun.net.httpserver implementation to replace the existing code 
in BasicAuthentication.

Changes have been made to two files 
sun/net/www/protocol/http/BasicAuthentication.java
and sun/net/www/protocol/http/NegotiateAuthentication.java to refactor the
classes to use java.util.Base64 (Base64.Encoder&  Base64.Decoder)
rather than sun.misc.BASE64Encoder&  sun.misc.BASE64Decoder

Diffs inline

regards
Mark Sheppard.

---------------------------------BasicAuthnetication------------------------------------


@@ -32,7 +32,8 @@ import java.io.IOException;
  import java.io.IOException;
  import java.io.OutputStream;
  import sun.net.www.HeaderParser;
-import sun.misc.BASE64Encoder;
+import java.util.Base64;
+import java.util.Base64.Encoder;

  /**
   * BasicAuthentication: Encapsulate an http server authentication using
@@ -76,7 +77,7 @@ class BasicAuthentication extends Authen
          System.arraycopy(nameBytes, 0, concat, 0, nameBytes.length);
          System.arraycopy(passwdBytes, 0, concat, nameBytes.length,
                           passwdBytes.length);
-        this.auth = "Basic " + (new BasicBASE64Encoder()).encode(concat);
+        this.auth = "Basic " + Base64.getEncoder().encodeToString(concat);
          this.pw = pw;
      }

@@ -116,7 +117,7 @@ class BasicAuthentication extends Authen
          System.arraycopy(nameBytes, 0, concat, 0, nameBytes.length);
          System.arraycopy(passwdBytes, 0, concat, nameBytes.length,
                           passwdBytes.length);
-        this.auth = "Basic " + (new BasicBASE64Encoder()).encode(concat);
+        this.auth = "Basic " + Base64.getEncoder().encodeToString(concat);
          this.pw = pw;
      }

@@ -202,11 +203,4 @@ class BasicAuthentication extends Authen
          return npath;
      }

-    /* It is never expected that the header value will exceed the bytesPerLine 
*/
-    private class BasicBASE64Encoder extends BASE64Encoder {
-        @Override
-        protected int bytesPerLine() {
-            return (10000);
-        }
-    }
  }


---------------------------------NegotiateAuthentication--------------------------------

@@ -30,8 +30,9 @@ import java.net.Authenticator.RequestorT
  import java.net.Authenticator.RequestorType;
  import java.util.HashMap;
  import sun.net.www.HeaderParser;
-import sun.misc.BASE64Decoder;
-import sun.misc.BASE64Encoder;
+import java.util.Base64;
+import java.util.Base64.Decoder;
+import java.util.Base64.Encoder;
  import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE;
  import static sun.net.www.protocol.http.AuthScheme.KERBEROS;

@@ -151,9 +152,10 @@ class NegotiateAuthentication extends Au
              byte[] incoming = null;
              String[] parts = raw.split("\\s+");
              if (parts.length>  1) {
-                incoming = new BASE64Decoder().decodeBuffer(parts[1]);
+                incoming = Base64.getDecoder().decode(parts[1]);
              }
-            response = hci.scheme + " " + new B64Encoder().encode(
+            response = hci.scheme + " "
+                + Base64.getEncoder().encodeToString(
                          incoming==null?firstToken():nextToken(incoming));

              conn.setAuthenticationProperty(getHeaderName(), response);
@@ -201,11 +203,6 @@ class NegotiateAuthentication extends Au
          return negotiator.nextToken(token);
      }

-    class B64Encoder extends BASE64Encoder {
-        protected int bytesPerLine () {
-            return 100000;  // as big as it can be, maybe INT_MAX
-        }
-    }

      // MS will send a final WWW-Authenticate even if the status is already
      // 200 OK. The token can be fed into initSecContext() again to determine

Reply via email to