String name = ((SimpleCredentials) credentials).getUserID();
char[] pswd = ((SimpleCredentials) credentials).getPassword();
thisCredentials = new CredentialsImpl(name, pswd);
}
else
throw new LoginException(
"Credentials for the authentication should be CredentialsImpl or SimpleCredentials type");
// SYSTEM
// TODO do we need to cache system state (identity) in registry?
if (thisCredentials.getUserID().equals(SystemIdentity.SYSTEM))
{
Identity sid = new Identity(SystemIdentity.SYSTEM, new HashSet<MembershipEntry>());
return new ConversationState(sid);
}
// prepare to new login
// uses BasicCallbackHandler
CallbackHandler handler = new BasicCallbackHandler(thisCredentials.getUserID(), thisCredentials.getPassword());
// and try to login
try
{
LoginContext loginContext = new LoginContext(config.getSecurityDomain(), handler);
loginContext.login();
}
catch (javax.security.auth.login.LoginException e)
{
throw new LoginException("Login failed for " + thisCredentials.getUserID() + " " + e);
}
if (log.isDebugEnabled())
log.debug("Logged " + thisCredentials.getUserID());
// supposed to be set
Identity identity = identityRegistry.getIdentity(thisCredentials.getUserID());
if (identity == null)
{
throw new LoginException("Identity not found, check Loginmodule, userId " + thisCredentials.getUserID());
}
ConversationState state = new ConversationState(identity);
String[] aNames = thisCredentials.getAttributeNames();
for (String name : aNames)
{