Solved

java.net.Authenticator and setDault()

Posted on 2003-11-24
17
863 Views
Last Modified: 2012-05-04
How can the authenticator initially set using setDefault() be 'undone' or 'reset'. In my code I'd like to reset the authenticator to use a new set of credentials each time it's called but it keeps using the credentials that were used to create the initial authenticator. Any help out there?
0
Comment
Question by:craigdawson
  • 9
  • 6
  • 2
17 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 9812982
How are you trying to reset it? - please post code
0
 

Author Comment

by:craigdawson
ID: 9813077
I am not trying because I don't know how to do it :-)  The basic code is below.

// Install Authenticator
Authenticator.setDefault (new MyAuthenticator (userId, password));
...

class MyAuthenticator extends Authenticator {
         private String username = "";
          private String password = "";
   
          public MyAuthenticator(){}
   
          public MyAuthenticator(String username, String password){
                this.username = username;
                this.password = password;
          }
   
          protected PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication (this.username, this.password.toCharArray());
          }

}
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9813100
You can use the same authenticator:

String password = null;
String username = null;
String hostname = getRequestingHost();
if (hostname.equals("somehost.somewhere.com")) {
  username = "uname1";
  password = "password1");
}
else if(.....
0
Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

 
LVL 86

Expert Comment

by:CEHJ
ID: 9813146
To have a looser coupling between your code and the credentials, you could keep them in a Map keyed on hostname and use Properties to load username/passwords (which you could encrypt if necessary)

0
 

Author Comment

by:craigdawson
ID: 9813150
Not sure that helps me. I want to hit the same url with different credentials each time.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9813187
Then just rotate credentials each time the callback function is called:

numberOfCalls++;      
switch(numberOfCalls) {
      case 1:
            username = "y";
            password = "x";
            break;
      case 2:
            username = "p";
            password = "q";
            break;
}            
            
0
 

Author Comment

by:craigdawson
ID: 9813247
Not just different credentials. User-supplied credentials. I can't hard code them.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9813287
Then what's wrong with

username = getUsernameFromUser();      
password = getPasswordFromUser();

?
0
 

Author Comment

by:craigdawson
ID: 9813354
I have Java web app. The login page accepts credentials. Once the user has entered id and pw, the code must invoke an ASP page with thise same credentials, stream in some content, and continue with the java/jsp processing. It's the call to the ASP I'm trying to use the Authenticator for. I can't ask for the credentials again.

Thanks for all your input to this point.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9813388
>>It's the call to the ASP I'm trying to use the Authenticator for

I still don't see what the problem is. What about

String username = (String)request().getSession().getAttribute("username");
String password = (String)request().getSession().getAttribute("password");

(these details having previously been put in the session)

?
0
 

Author Comment

by:craigdawson
ID: 9813842
Maybe I'm just dense but ...

The request object isn't available in getPasswordAuthentication(). If I add it to the constructor and store it, I get an exception: java.lang.IllegalStateException: Context has not been prepared for next connection.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9813877
You could pass the session as an argument to an Authenticator constructor
0
 
LVL 92

Expert Comment

by:objects
ID: 9814864
> You could pass the session as an argument to an Authenticator constructor

Don't think you can do that.
0
 
LVL 92

Expert Comment

by:objects
ID: 9814877
Is there a point in your code where you know the cr4edentials have changed and what they are? If so you could change the authenticator at that point.
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 250 total points
ID: 9817377
>>Don't think you can do that.

What makes you think that? Give it a try craigdawson...
0
 

Author Comment

by:craigdawson
ID: 9817575
Using session worked. Full marks for persistence to CEHJ! Thanks.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9817666
:-)
0

Featured Post

Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
simple java question 3 56
check java version using powershell 13 95
Java: How do I open the default windows program for a given file type 3 29
jsp login check 12 32
For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
This video teaches viewers about errors in exception handling.

822 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question