我刚在两天前就得到了这个需求,我第一次使用了LDAP(openDS)。事实上,我的研发时间非常有限,我已经尽可能多地阅读了开发者指南和openDS的SDK。
基本上,我有一个非常简单的要求。我将被提供一个' user -id‘,并且使用它我必须验证这个用户是否属于LDAP中的任何可用组(由我定义)。
我已经成功地完成了这个代码片段:
public void getGroup(String userId) {
Connection connection = new LDAPConnection().getConnection();
try {
// No explicit bind yet so we remain anonymous for now.
SearchResultEntry entry;
entry = connection.searchSingleEntry("ou=Groups,dc=example,dc=com",
SearchScope.WHOLE_SUBTREE,
"(uniqueMember=" + "uid="+userId+", ou=People, dc=example,dc=com" + ")",
"cn");
String cn = entry.getAttribute("cn").firstValueAsString();
System.out.println("Hello, " + cn + "!");
} catch (ErrorResultException e) {
e.getMessage();
} finally {
closeConnection(connection);
}
}现在,如果我收到一个搜索结果,那么该用户属于一个组,否则不会。现在我不确定这是否是实现这一目标的方法。我看起来也有点像'isMemberOf‘,但我不确定API提供的是这样的方法还是其他的方法。
任何帮助都是非常感谢的。谢谢。
发布于 2012-06-03 16:02:54
LDAP客户端应该使用以下过滤器向服务器发送搜索请求:
'(isMemberOf=<the distinguished name of the entry>)'以及适当的基本对象、筛选器和请求的属性。这假设服务器启用了isMemberOf虚拟属性。
如果只有相对可分辨名称组件可用,则LDAP客户端必须搜索可分辨名称--在本例中,使用(<attribute-type>=<userid>>) (例如,'(uid=user.1)')和1.1对请求属性进行搜索,这将不会返回任何属性。始终为每个匹配的条目返回可分辨的名称。然后用isMemberOf构造过滤器,再进行搜索。
另请参阅
发布于 2012-06-04 07:27:54
上面的搜索确实返回了集团的cn。如果您获得了一个userid,并且需要检查用户是否在一个众所周知的组中,那么过滤器"(isMemberOf= )
如果您搜索(&(uid=))(isMemberOf=,即该组的一部分)。
致以亲切的问候,
路多维奇。
https://stackoverflow.com/questions/10869094
复制相似问题