Создание пользователя в Oracle Internet Directory
Попытки разрыть тему программного создания пользователей в Oracle Internet Directory ни к чему не привели, в данный момент существует несколько очень туманных документов на эту тему, каждый из которых использует различные классы и примеры в которых явно писались людьми "с листа", т.е. не проверялись и не компилировались.
Вот основные ссылки по теме:
http://docs.huihoo.com/oracle/docs/B14099_19/idmanage.1012/b15975/toc.htm
http://download-east.oracle.com/docs/cd/B14099_11/idmanage.1012/b14083/overview-summary.html
Developing Applications with Standard LDAP APIs
Java API for Oracle Internet Directory
12 User and Role API Framework
Во время работы с примерами появлялись исключения, которые гугль вообще ни разу нигде не видел:
1. Неправильно указанный Realm:
oracle.ldap.util.UtilException: Subscriber does not exist - SIMPLE NAME = DEFAULT COMPANY
at oracle.ldap.util.Subscriber.resolve(Subscriber.java:570)
at oracle.ldap.util.Subscriber.<init>(Subscriber.java:319)
at oracle.ldap.util.RootOracleContext.getSubscriber(RootOracleContext.java:315)
at oracle.idm.user.JndiUserFactory.<init>(JndiUserFactory.java:91)
at oracle.idm.user.UserFactoryBuilder.createUserFactory(UserFactoryBuilder.java:193)
at tbm.ldap.UserLogic.m2(UserLogic.java:62)
at tbm.ldap.UserLogic.main(UserLogic.java:98)
2. Так и не понял что за ошибка:
oracle.ldap.util.schema.ODISchemaException
at oracle.ldap.util.schema.DIPSchema.getRootContextRootSchemaLocation(DIPSchema.java:603)
at oracle.ldap.util.schema.DIPSchema.resolve(DIPSchema.java:535)
at oracle.ldap.util.schema.DIPSchema.setDirContext(DIPSchema.java:278)
at oracle.ldap.util.schema.DIPSchema.<init>(DIPSchema.java:124)
at oracle.idm.provisioning.configuration.Configuration.initConfig(Configuration.java:390)
at oracle.idm.provisioning.configuration.Configuration.getAllApplications(Configuration.java:222)
at oracle.idm.provisioning.configuration.Configuration.getAllApplications(Configuration.java:197)
at tbm.ldap.UserLogic.m2(UserLogic.java:133)
at tbm.ldap.UserLogic.main(UserLogic.java:282)
В итоге был получен работоспособный метод, который использует identitystore.jar и классы из пакета oracle.security.idm
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import oracle.idm.provisioning.configuration.Application;
import oracle.idm.provisioning.configuration.Configuration;
import oracle.idm.provisioning.util.ProvUtil;
import oracle.idm.user.IdmUser;
import oracle.idm.user.UserFactoryBuilder;
import oracle.idm.user.UserFactory;
//import oracle.security.user.UserFactory;
//import oracle.ldap.util.IniUtilException;
import oracle.ldap.util.ModPropertySet;
import oracle.ldap.util.LDIF;
import oracle.ldap.util.Property;
import oracle.ldap.util.PropertySet;
import oracle.ldap.util.PropertySetCollection;
import oracle.ldap.util.UtilDebug;
import oracle.ldap.util.jndi.ConnectionUtil;
import oracle.security.idm.IdentityStore;
import oracle.security.idm.IdentityStoreFactory;
import oracle.security.idm.IdentityStoreFactoryBuilder;
import oracle.security.idm.IMException;
import oracle.security.idm.SearchParameters;
import oracle.security.idm.SearchResponse;
import oracle.security.idm.SimpleSearchFilter;
import oracle.security.idm.User;
import oracle.security.idm.UserManager;
import oracle.security.idm.UserProfile;
import oracle.security.idm.providers.oid.OIDIdentityStoreFactory;
public class UserLogic {
public void m3() {
try {
IdentityStoreFactoryBuilder builder =
new IdentityStoreFactoryBuilder();
IdentityStoreFactory oidFactory = null;
Hashtable factEnv = new Hashtable();
// creating the factory instance
// set the configuration information
factEnv.put(OIDIdentityStoreFactory.ST_SECURITY_PRINCIPAL, "cn=orcladmin");
factEnv.put(OIDIdentityStoreFactory.ST_SECURITY_CREDENTIALS, "welcome1");
factEnv.put(OIDIdentityStoreFactory.ST_LDAP_URL,
"ldap://web.tbm.ru:389/");
factEnv.put(OIDIdentityStoreFactory.ST_LOGGING,"false");
factEnv.put(OIDIdentityStoreFactory.ST_LOG_LEVEL,
java.util.logging.Level.ALL);
oidFactory = builder.getIdentityStoreFactory(
"oracle.security.idm.providers.oid.OIDIdentityStoreFactory", factEnv);
Hashtable storeEnv = new Hashtable();
// creating the store instance
storeEnv.put(OIDIdentityStoreFactory.ST_SUBSCRIBER_NAME,
"us"); //Здесь необходимо указать название вашего Realm
IdentityStore oidStore = oidFactory.getIdentityStoreInstance(storeEnv);
UserManager mng = oidStore.getUserManager();
System.out.println("User creating supported:"+mng.isCreateUserSupported());
User test = oidStore.searchUser("msdmsdam");
if (test == null) {
System.out.println("User not found creating.");
test = mng.createUser("msdmsdam", null);
} else System.out.println("User found.");
//Присваиваем для теста атрибуты в профиль, все изменения сохраняются на лету.
{
UserProfile prf = test.getUserProfile();
prf.setBusinessCity("Moscow");
prf.setUserID("AAAAAAAAAAAAAAAAAA");
}
//Для примера выставляем пользователю группу
{
System.out.println("Role searching.");
RoleManager gmng = oidStore.getRoleManager();
Role rle = oidStore.searchRole(IdentityStore.SEARCH_BY_NAME, "clients");
gmng.grantRole(rle, test.getPrincipal());
System.out.println("Role granted.");
}
// ищем пользователей по маске j*
SimpleSearchFilter sf = oidStore.getSimpleSearchFilter(
UserProfile.NAME, SimpleSearchFilter.TYPE_EQUAL, null);
// Add the wildcard character
sf.setValue("j"+sf.getWildCardChar());
// generate the search parameter instance and set the search filter
SearchParameters params = new SearchParameters();
params.setFilter(sf);
// Searching for users
// search on the IdentityStore instance
SearchResponse resp = oidStore.searchUsers(params);
System.out.println("Searched users are:");
// Iterate on the search results
while (resp.hasNext())
{
User usr = (User) resp.next();
UserProfile prf = usr.getUserProfile();
System.out.println("Name: "+usr.getName());
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
Вот основные ссылки по теме:
http://docs.huihoo.com/oracle/docs/B14099_19/idmanage.1012/b15975/toc.htm
http://download-east.oracle.com/docs/cd/B14099_11/idmanage.1012/b14083/overview-summary.html
Developing Applications with Standard LDAP APIs
Java API for Oracle Internet Directory
12 User and Role API Framework
Во время работы с примерами появлялись исключения, которые гугль вообще ни разу нигде не видел:
1. Неправильно указанный Realm:
oracle.ldap.util.UtilException: Subscriber does not exist - SIMPLE NAME = DEFAULT COMPANY
at oracle.ldap.util.Subscriber.resolve(Subscriber.java:570)
at oracle.ldap.util.Subscriber.<init>(Subscriber.java:319)
at oracle.ldap.util.RootOracleContext.getSubscriber(RootOracleContext.java:315)
at oracle.idm.user.JndiUserFactory.<init>(JndiUserFactory.java:91)
at oracle.idm.user.UserFactoryBuilder.createUserFactory(UserFactoryBuilder.java:193)
at tbm.ldap.UserLogic.m2(UserLogic.java:62)
at tbm.ldap.UserLogic.main(UserLogic.java:98)
2. Так и не понял что за ошибка:
oracle.ldap.util.schema.ODISchemaException
at oracle.ldap.util.schema.DIPSchema.getRootContextRootSchemaLocation(DIPSchema.java:603)
at oracle.ldap.util.schema.DIPSchema.resolve(DIPSchema.java:535)
at oracle.ldap.util.schema.DIPSchema.setDirContext(DIPSchema.java:278)
at oracle.ldap.util.schema.DIPSchema.<init>(DIPSchema.java:124)
at oracle.idm.provisioning.configuration.Configuration.initConfig(Configuration.java:390)
at oracle.idm.provisioning.configuration.Configuration.getAllApplications(Configuration.java:222)
at oracle.idm.provisioning.configuration.Configuration.getAllApplications(Configuration.java:197)
at tbm.ldap.UserLogic.m2(UserLogic.java:133)
at tbm.ldap.UserLogic.main(UserLogic.java:282)
В итоге был получен работоспособный метод, который использует identitystore.jar и классы из пакета oracle.security.idm
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import oracle.idm.provisioning.configuration.Application;
import oracle.idm.provisioning.configuration.Configuration;
import oracle.idm.provisioning.util.ProvUtil;
import oracle.idm.user.IdmUser;
import oracle.idm.user.UserFactoryBuilder;
import oracle.idm.user.UserFactory;
//import oracle.security.user.UserFactory;
//import oracle.ldap.util.IniUtilException;
import oracle.ldap.util.ModPropertySet;
import oracle.ldap.util.LDIF;
import oracle.ldap.util.Property;
import oracle.ldap.util.PropertySet;
import oracle.ldap.util.PropertySetCollection;
import oracle.ldap.util.UtilDebug;
import oracle.ldap.util.jndi.ConnectionUtil;
import oracle.security.idm.IdentityStore;
import oracle.security.idm.IdentityStoreFactory;
import oracle.security.idm.IdentityStoreFactoryBuilder;
import oracle.security.idm.IMException;
import oracle.security.idm.SearchParameters;
import oracle.security.idm.SearchResponse;
import oracle.security.idm.SimpleSearchFilter;
import oracle.security.idm.User;
import oracle.security.idm.UserManager;
import oracle.security.idm.UserProfile;
import oracle.security.idm.providers.oid.OIDIdentityStoreFactory;
public class UserLogic {
public void m3() {
try {
IdentityStoreFactoryBuilder builder =
new IdentityStoreFactoryBuilder();
IdentityStoreFactory oidFactory = null;
Hashtable factEnv = new Hashtable();
// creating the factory instance
// set the configuration information
factEnv.put(OIDIdentityStoreFactory.ST_SECURITY_PRINCIPAL, "cn=orcladmin");
factEnv.put(OIDIdentityStoreFactory.ST_SECURITY_CREDENTIALS, "welcome1");
factEnv.put(OIDIdentityStoreFactory.ST_LDAP_URL,
"ldap://web.tbm.ru:389/");
factEnv.put(OIDIdentityStoreFactory.ST_LOGGING,"false");
factEnv.put(OIDIdentityStoreFactory.ST_LOG_LEVEL,
java.util.logging.Level.ALL);
oidFactory = builder.getIdentityStoreFactory(
"oracle.security.idm.providers.oid.OIDIdentityStoreFactory", factEnv);
Hashtable storeEnv = new Hashtable();
// creating the store instance
storeEnv.put(OIDIdentityStoreFactory.ST_SUBSCRIBER_NAME,
"us"); //Здесь необходимо указать название вашего Realm
IdentityStore oidStore = oidFactory.getIdentityStoreInstance(storeEnv);
UserManager mng = oidStore.getUserManager();
System.out.println("User creating supported:"+mng.isCreateUserSupported());
User test = oidStore.searchUser("msdmsdam");
if (test == null) {
System.out.println("User not found creating.");
test = mng.createUser("msdmsdam", null);
} else System.out.println("User found.");
//Присваиваем для теста атрибуты в профиль, все изменения сохраняются на лету.
{
UserProfile prf = test.getUserProfile();
prf.setBusinessCity("Moscow");
prf.setUserID("AAAAAAAAAAAAAAAAAA");
}
//Для примера выставляем пользователю группу
{
System.out.println("Role searching.");
RoleManager gmng = oidStore.getRoleManager();
Role rle = oidStore.searchRole(IdentityStore.SEARCH_BY_NAME, "clients");
gmng.grantRole(rle, test.getPrincipal());
System.out.println("Role granted.");
}
// ищем пользователей по маске j*
SimpleSearchFilter sf = oidStore.getSimpleSearchFilter(
UserProfile.NAME, SimpleSearchFilter.TYPE_EQUAL, null);
// Add the wildcard character
sf.setValue("j"+sf.getWildCardChar());
// generate the search parameter instance and set the search filter
SearchParameters params = new SearchParameters();
params.setFilter(sf);
// Searching for users
// search on the IdentityStore instance
SearchResponse resp = oidStore.searchUsers(params);
System.out.println("Searched users are:");
// Iterate on the search results
while (resp.hasNext())
{
User usr = (User) resp.next();
UserProfile prf = usr.getUserProfile();
System.out.println("Name: "+usr.getName());
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}