callbacks[0] = new NameCallback("User name");
callbacks[1] = new PasswordCallback("Password", false);
try {
handler.handle(callbacks);
} catch (IOException ioe) {
throw (LoginException) new LoginException().initCause(ioe);
} catch (UnsupportedCallbackException uce) {
throw (LoginException) new LoginException().initCause(uce);
}
assert callbacks.length == 2;
cbUsername = ((NameCallback) callbacks[0]).getName();
if (cbUsername == null || cbUsername.equals("")) {
return false;
}
char[] provided = ((PasswordCallback) callbacks[1]).getPassword();
cbPassword = provided == null ? null : new String(provided);
boolean found = false;
try {
Connection conn;
if(factory != null) {
DataSource ds = (DataSource) factory.getConnectionFactory();
conn = ds.getConnection();
} else {
conn = driver.connect(connectionURL, properties);
}
try {
PreparedStatement statement = conn.prepareStatement(userSelect);
try {
int count = countParameters(userSelect);
for(int i=0; i<count; i++) {
statement.setObject(i+1, cbUsername);
}
ResultSet result = statement.executeQuery();
try {
while (result.next()) {
String userName = result.getString(1);
String userPassword = result.getString(2);
if (cbUsername.equals(userName)) {
found = (cbPassword == null && userPassword == null) ||
(cbPassword != null && userPassword != null && cbPassword.equals(userPassword));
break;
}
}
} finally {
result.close();
}
} finally {
statement.close();
}
if (!found) {
throw new FailedLoginException();
}
statement = conn.prepareStatement(groupSelect);
try {
int count = countParameters(groupSelect);
for(int i=0; i<count; i++) {
statement.setObject(i+1, cbUsername);
}
ResultSet result = statement.executeQuery();
try {
while (result.next()) {
String userName = result.getString(1);
String groupName = result.getString(2);
if (cbUsername.equals(userName)) {
groups.add(new GeronimoGroupPrincipal(groupName));
}
}
} finally {
result.close();
}
} finally {
statement.close();
}
} finally {
conn.close();
}
} catch (SQLException sqle) {
throw (LoginException) new LoginException("SQL error").initCause(sqle);
}
return true;
}