Поиск пользователей средствами Forgerock ClientSDK

Все. Я пытаюсь найти пользователей с помощью инструментов ClientSDK Forgerock OpenAM-12.0.0 от sunIdentityServerPPCommonNameSN. Посмотрите мой код. Я узнал, что могу искать пользователей по AMIdentityRepository.searchIdentities аргумента фильтра. Однако я не узнаю формат. Пожалуйста, помогите мне. Внимание.

protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
                // TODO Auto-generated method stub
                try {
                        AuthContext ac = new AuthContext("/");
                AuthContext.IndexType indexType =
AuthContext.IndexType.MODULE_INSTANCE;
                String indexName = "DataStore";

                ac.login(indexType, indexName);

                Callback[] callback = ac.getRequirements();

                for (int i =0 ; i< callback.length ; i++) {
                    if (callback[i] instanceof NameCallback) {
                        NameCallback name = (NameCallback) callback[i];
                        name.setName("amAdmin");
                    } else if (callback[i] instanceof PasswordCallback) {
                        PasswordCallback pass = (PasswordCallback) callback[i];
                        String password = "adAdmin00";
                        pass.setPassword(password.toCharArray());
                    }

                }

                ac.submitRequirements(callback);

                        if(ac.getStatus() == AuthContext.Status.SUCCESS){
                                SSOToken token = ac.getSSOToken();
                                AMIdentityRepository amIr = new AMIdentityRepository(token, "/");

                                // I want to search for the users by sunIdentityServerPPCommonNameSN;
                                String filter = "sunIdentityServerPPCommonNameSN=*";
                IdSearchResults isr = amIr.searchIdentities(IdType.USER,
filter,
                        new IdSearchControl());
                Set<AMIdentity> results = isr.getSearchResults();

                if ((results != null) && !results.isEmpty()) {
                    IdSearchResults specialUsersResults =
                            amIr.getSpecialIdentities(IdType.USER);

results.removeAll(specialUsersResults.getSearchResults());

                    for (Iterator<AMIdentity> i = results.iterator();
i.hasNext(); ) {
                        AMIdentity amid = i.next();
                        System.out.println("dn: "+ amid.getDN());
                        System.out.println("realm: "+ amid.getRealm());
                        System.out.println("uid: "+ amid.getUniversalId());
                        System.out.println("type: "+ amid.getType());

                    }
                }
                        }
                } catch (AuthLoginException e) {
                        e.printStackTrace();
                } catch (L10NMessageImpl e) {
                        e.printStackTrace();
                } catch (IdRepoException e) {
                        e.printStackTrace();
                }
        }

person Kensuke Sato    schedule 10.05.2015    source источник


Ответы (1)


Настоятельно рекомендуется использовать REST API ForgeRock, а не Java SDK.

Ознакомьтесь с руководством для разработчиков OpenAM http://openam.forgerock.org/doc/webhelp/dev-guide/rest-api-query-identity.html

Лучшей альтернативой является прямой запрос к хранилищу данных. Например, если вы используете OpenDJ, вы можете использовать OpenDJ LDAP SDK или интерфейс OpenDJ REST.

person Warren Strange    schedule 11.05.2015
comment
Спасибо, Уоррен. Но я хочу использовать ClientSDK Tools. Почему вы не рекомендуете использовать инструменты? - person Kensuke Sato; 11.05.2015
comment
REST API работают на всех языках (не только на Java). Большая часть будущих улучшений будет направлена ​​на REST API, а не на Java SDK. - person Warren Strange; 12.05.2015