in hawtio-system/src/main/java/io/hawt/web/tomcat/TomcatUserDatabaseLoginContext.java [131:172]
public boolean login() throws LoginException {
// get username and password
Callback[] callbacks = new Callback[2];
callbacks[0] = new NameCallback("username");
callbacks[1] = new PasswordCallback("password", false);
try {
callbackHandler.handle(callbacks);
String username = ((NameCallback) callbacks[0]).getName();
char[] tmpPassword = ((PasswordCallback) callbacks[1]).getPassword();
String password = new String(tmpPassword);
((PasswordCallback) callbacks[1]).clearPassword();
LOG.debug("Getting user details for username {}", username);
String[] user = getUserPasswordRole(username);
if (user != null) {
if (! passwordsMatch(new PasswordPair(user[1], password))) {
LOG.trace("Login denied due password did not match");
return false;
}
String[] roles = user[2].split(",");
for (String role : roles) {
LOG.trace("User {} has role {}", username, role);
subject.getPrincipals().add(new TomcatPrincipal(username, role));
}
} else {
LOG.trace("Login denied due user not found");
return false;
}
} catch (UnsupportedCallbackException uce) {
LoginException le = new LoginException("Error: " + uce.getCallback().toString()
+ " not available to gather authentication information from the user");
le.initCause(uce);
throw le;
} catch (Exception ioe) {
LoginException le = new LoginException(ioe.toString());
le.initCause(ioe);
throw le;
}
return true;
}