//re-authentication has been requested, so remove them
if (userPrincipal != null) {
userMap.remove(username);
}
ClearableCallbackHandler callbackHandler;
if (credentials instanceof char[]) {
char[] password = (char[]) credentials;
callbackHandler = new PasswordCallbackHandler(username, password);
} else if (credentials instanceof String) {
char[] password = ((String) credentials).toCharArray();
callbackHandler = new PasswordCallbackHandler(username, password);
} else if (credentials instanceof X509Certificate[]) {
X509Certificate[] certs = (X509Certificate[]) credentials;
if (certs.length < 1) {
throw new LoginException("no certificates supplied");
}
callbackHandler = new CertificateCallbackHandler(certs[0]);
} else {
throw new LoginException("Cannot extract credentials from class: " + credentials.getClass().getName());
}
//set up the login context
LoginContext loginContext = ContextManager.login(configurationFactory.getConfigurationName(), callbackHandler, configurationFactory.getConfiguration());
callbackHandler.clear();
Subject subject = loginContext.getSubject();
ContextManager.setCallers(subject, subject);
//login success