Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

java.net.Authenticator and setDault()

Posted on 2003-11-24
17
Medium Priority
?
877 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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 1000 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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This video teaches viewers about errors in exception handling.
Suggested Courses

636 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