Java-从 LDAP 检索 shiro 的权限

标签 java ldap shiro

我正在尝试使用带有 shiro 的 Java 应用程序获取 LDAP 对象的用户权限(读取、写入、浏览...)。我对 LDAP 没有太多经验。我使用 Apache Directory Studio 设置了一个服务器用于测试目的。然后我创建了一个域 (dc=testdomain) 并添加了一个带有“accessControlSubentry”对象类的子条目并添加了“prescriptiveACI”属性。如果我使用 Apache DS 浏览服务器并且我可以在我的 Java 应用程序中连接到服务器,一切都会按应有的方式工作。

为了获得权限,我从 shiro 继承了 ActiveDirectoryRealm。但我无法设法让查询获得子条目。

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=*)”时,我得到了域中的所有 OrganisationUnits。但我似乎无法找到 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 服务器获取权限?

最佳答案

因此,您想查找具有 prescriptiveACI 属性的 accessControlSubentry 对象的所有实例?

试试这个:

(&(objectClass=accessControlSubentry)(prescriptiveACI=*))

关于Java-从 LDAP 检索 shiro 的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22500765/

相关文章:

java - 序列化字段的属性而不是整个字段

sql - SQL 和 LDAP 之间的区别

active-directory - SonarQube LDAP 插件 Active Directory 嵌套组

在 Shiro 领域 Autowiring 时,具有可缓存方法的 Spring 服务在没有缓存的情况下初始化

java - 不同的 SimpleDateFormat 解析

java - 突出显示 ListCell 时 float 矩形

grails - shiro ldap 领域代码中的 Cookie

grails - 用密码登录Apache Shiro Grails中的哈希

java - Shiro:如何为受@RequiresRoles 保护的端点编写测试?

java - 分类和回归树 - 用 GINI 进行最优分割计算