MitreID Connect:检索LDAP操作属性

时间:2017-02-21 11:00:53

标签: attributes ldap spring-ldap operational mitreid-connect

我正在研究MitreID Connect项目的LDAP覆盖,并且正在极大地工作:

  1. 验证
  2. 从LDAP目录中检索属性
  3. 我现在遇到的问题是如何检索LDAP目录中的操作属性。

    我对Spring开发并不擅长,但是我找到了一些处理这个sub的文档,但是我无法使它工作。

    这是我发现的:

    检索操作属性

    Ldap Server在内部维护许多操作属性。示例entryUUID是一个操作属性,它将通用唯一标识符(UUID)分配给该条目。 createTimestamp,modifyTimestamp也是在创建或更新时分配给条目的操作属性。这些操作属性不属于对象类,因此它们不会作为搜索或查找的一部分返回。您需要在搜索中通过其名称显式请求它们,或者使用匹配的属性名称构建自定义AttributeMapper实现。 现在让我们尝试检索entryUUID,首先你需要构建像这样的搜索控件,

    SearchControls controls = new SearchControls();
    controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    controls.setReturningObjFlag(false);
    controls.setReturningAttributes(new String[]{"entryUUID"});
    Once you have search control then it’s simply calling search method just like retrieving any other attributes.
    
    
    ldapTemplate.search("baseName", "(objectclass=person)", controls, new AttributesMapper() {
    public Object mapFromAttributes(Attributes attrs) throws NamingException {
    Attribute attrUuid = attrs.get("entryUUID");
    return attrUuid;
    }});
    

    以下是使用ContextMapper

    执行相同操作的另一种方法
    ldapTemplate.search("baseName","(objectclass=person)", 1, new String[]{"entryUUID"},
    new ContextMapper(){
    public Object mapFromContext(Object ctx) {
    DirContextAdapter context = (DirContextAdapter)ctx;
    return context.getStringAttributes("entryUUID");
    }
    });
    

    让我们根据以下操作属性添加过滤器,

    OrFilter orFilter = new OrFilter();
    orFilter.or(new GreaterThanOrEqualsFilter("createTimestamp", "YYYYMMDDHHMMSSZ"));
    orFilter.or(new LessThanOrEqualsFilter("modifyTimestamp", "YYYYMMDDHHMMSSZ"));
    

    现在使用过滤器

    调用上述搜索
    ldapTemplate.search("baseName", orFilter.encode(), controls, new AttributesMapper() {
    public Object mapFromAttributes(Attributes attrs) throws NamingException {
    Attribute attrUuid = attrs.get("entryUUID");
    return attrUuid;
    }});
    

0 个答案:

没有答案