JDK-7013089 : java.net.Authenticator cannot be set on a per-connection basis
  • Type: Enhancement
  • Component: core-libs
  • Sub-Component: java.net
  • Affected Version: 6u23
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2008
  • CPU: x86
  • Submitted: 2011-01-18
  • Updated: 2011-02-09
  • Resolved: 2011-02-09
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
JDK 6

ADDITIONAL OS VERSION INFORMATION :
Any OS.

A DESCRIPTION OF THE PROBLEM :
java.net.Authenticator can only be set as a static instance, but not per connection. This is not really useful in a multithreaded multi-user environment where many connections to many servers should be authenticated.

The limitation is known at Sun/Oracle, as this comment in sun.net.www.protocol.http.HttpURLConnection shows:

    /* We only have a single static authenticator for now.
     * REMIND:  backwards compatibility with JDK 1.1.  Should be
     * eliminated for JDK 2.0.
     */
    private static HttpAuthenticator defaultAuth;


STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Look at the JavaDocs, or at the implementation class sun.net.www.protocol.http.HttpURLConnection.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I would expect that authentication with HTTP connections could also be used in a multithreaded multi-user server environment. This could easily be achieved by setting an Authenticator on a connection instance that would override the static default Authenticator.
ACTUAL -
  Programmes have to use other HTTP clients, the e.g. Apache HTTP Client.

REPRODUCIBILITY :
This bug can be reproduced always.

CUSTOMER SUBMITTED WORKAROUND :
Use another HTTP client, e.g. Apache HTTP Client.