//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 = new LoginContext(securityRealmName, callbackHandler);
loginContext.login();
callbackHandler.clear();
Subject subject = ContextManager.getServerSideSubject(loginContext.getSubject());
//TODO use the run-as subject as nextCaller
ContextManager.setCallers(subject, subject);
ContextManager.setNextCaller(subject);