<< Установка кодировки Windows-1251 (cp1251) в postgresql | На главную | Особенности работы функции isUserInRole() в OC4J >>

Создание пользователя в 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();
        }
    }
}
}
Ярлыки : , ,



Комментировать Отправить TrackBack
На главную