Java - Извличане на разрешения от LDAP за shiro

опитвам се да получа потребителски разрешения (четене, писане, разглеждане,...) за LDAP обекти, използвайки java приложение с shiro. Нямам много опит с LDAP. Настроих сървър с Apache Directory Studio с цел тестване. След това създадох домейн (dc=testdomain) и добавих подзапис с обектния клас "accessControlSubentry" и добавих атрибута "prescriptiveACI". Всичко работи както трябва, ако преглеждам сървъра с Apache DS и мога да се свържа със сървъра в моето java приложение.

За да получа разрешенията, подкласирах ActiveDirectoryRealm от shiro. Но не мога да накарам заявката да получи подзаписите.

private Set<String> getPermissionsForUser(String username, LdapContext ldapContext) throws NamingException{
    Set<String> permissions;
    permissions = new LinkedHashSet<String>();

    SearchControls searchCtls = new SearchControls();
    searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    searchCtls.setReturningAttributes(new String[]{"prescriptiveACI"});

    String searchFilter = "(objectClass=subentry)";
    String searchBase = "dc=testdomain";
    NamingEnumeration answer = ldapContext.search(searchBase, searchFilter, searchCtls);

    while (answer.hasMoreElements()) {
        SearchResult sr = (SearchResult) answer.next();
        if (log.isDebugEnabled()) {
            log.debug("Retrieving permissions for user [" + sr.getName() + "]");
        }

        Attributes attrs = sr.getAttributes();

        if (attrs != null) {
            NamingEnumeration ae = attrs.getAll();
            while (ae.hasMore()) {
                Attribute attr = (Attribute) ae.next();

                if (attr.getID().equals("prescriptiveACI")) {

                    if (log.isDebugEnabled()) {
                        log.debug("Permissions found");
                    }
                }
            }
        }
    }
    return permissions;

}

Когато променя searchFilter на "(objectClass=*)", получавам всички организационни единици в домейна. Но просто не мога да намеря обектите на подзапис, които са ми необходими за атрибута prescriptiveACI.

Ето съдържанието на моя файл Shiro.ini

activeDirectoryRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealmPermissions
activeDirectoryRealm.systemUsername = uid=admin,ou=system
activeDirectoryRealm.systemPassword = secret
activeDirectoryRealm.url = ldap://localhost:10389
activeDirectoryRealm.searchBase = ""

Как мога да направя подзаписите на заявката за търсене? Или има по-добър/алтернативен начин за получаване на разрешение от LDAP сървъра?


person user2602386    schedule 19.03.2014    source източник


Отговори (1)


Значи искате да намерите всички екземпляри на accessControlSubentry обекти с атрибут prescriptiveACI?

Опитайте тази:

(&(objectClass=accessControlSubentry)(prescriptiveACI=*))
person Mike DiBaggio    schedule 19.11.2014