// this variable is set to true if we have used the older jaas
// mechanisms to process the callbacks - and we will not need
// to process further as the inside loop, just takes care
// of processing all callbacks
boolean processedSomeAppclientCallbacks = false;
for (int i=0; i < callbacks.length; i++) {
if (!processedSomeAppclientCallbacks) {
if ((callbacks[i] instanceof NameCallback) ||
(callbacks[i] instanceof PasswordCallback) ||
(callbacks[i] instanceof ChoiceCallback)) {
String loginName = UsernamePasswordStore.getUsername();
String password = UsernamePasswordStore.getPassword();
boolean doSet = false;
if (loginName == null) {
loginName = System.getProperty(LOGIN_NAME);
doSet = true;
}
if (password == null) {
password = System.getProperty(LOGIN_PASSWORD);
doSet = true;
}
if (doSet) {
UsernamePasswordStore.set(loginName, password);
}
CallbackHandler callbackHandler = AppContainer.getCallbackHandler();
if(loginName != null && password != null){
// username/password set already
for(int j = 0; j < callbacks.length; j++){
if(callbacks[j] instanceof NameCallback){
NameCallback nc = (NameCallback)callbacks[j];
nc.setName(loginName);
} else if (callbacks[j] instanceof PasswordCallback){
PasswordCallback pc = (PasswordCallback)callbacks[j];
pc.setPassword(password.toCharArray());
}
}
} else{
// once this is called all callbacks will be handled by
// callbackHandler and then we dont have to check for
// NameCallback PasswordCallback and ChoiceCallback
// again.
// Let control flow to the callback processors
callbackHandler.handle(callbacks);
}
processedSomeAppclientCallbacks = true;
break;
}
}
processCallback(callbacks[i]);
}