public SimpleCredentialStoreImpl(Map<String, String> credentials,
Collection<ConfigurationEntryFactory> realms,
ClassLoader cl) {
if (realms != null) {
configuration = new GeronimoLoginConfiguration(realms, true);
} else {
configuration = null;
}
if (credentials != null) {
for (Map.Entry< String, Map< String, Map< String, String > > > realmData: credentials.entrySet()) {
String realmName = realmData.getKey();
Map< String, Map< String, SingleCallbackHandler > > realm = getRealm(realmName);
for (Map.Entry< String, Map< String, String > > subjectData: realmData.getValue().entrySet()) {
String subjectId = subjectData.getKey();
Map< String, SingleCallbackHandler > subject = getSubject(realm, subjectId);
for (Map.Entry< String, String > credentialData: subjectData.getValue().entrySet()) {
String handlerType = credentialData.getKey();
String value = credentialData.getValue();
try {
Class< ? extends SingleCallbackHandler > clazz = (Class< ? extends SingleCallbackHandler >) cl.loadClass(handlerType);
Constructor< ? extends SingleCallbackHandler > c = clazz.getConstructor(String.class);
SingleCallbackHandler handler = c.newInstance(value);
String callbackType = handler.getCallbackType();
subject.put(callbackType, handler);
} catch (Exception e) {
throw new IllegalArgumentException("Could not construct SingleCallbackHandler of type: " + handlerType + " and value: " + value + " for subjectId: " + subjectId + " and realm: " + realmName, e);
}
}
}
}
}
}
|