java - 如何使用 sAMaccountName 在 Activity 目录中搜索用户,其中 sAMaccountName 是 (firstinitial+lastName)+(regex) 以任意数字结尾的连接?

标签 java regex active-directory

我想在 Active Directory 中使用 sAMaccountName 搜索用户,其中 sAMaccountName 是 firstName.substring(0,1)+lastName+以任意数字结尾。 代码片段:

 try {
      context=this.getADConnection();

      String returnedAtts[]={"givenName","sn"};
      String sAMAccountNameRegex=sAMAccountName+"\\d*";
      //String sAMAccountNameRegex=sAMAccountName+Pattern.quote("[0-9]*");
      SearchControls searchControls = new SearchControls();
  searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
  searchControls.setReturningAttributes(returnedAtts);
  searchControls.setReturningAttributes(returnedAtts);
  searchControls.setReturningAttributes(returnedAtts);
  //String searchFilter = "(&(objectClass=user)(givenName=" +firstInitial+"*)(sn="+lastName+"))";
  String searchFilter = "(&(objectClass=user) (|(&(givenName=" +firstInitial+"*)(sn="+lastName+"))(sAMAccountName=("+sAMAccountNameRegex+"))) )";
  logger.info(className + privateMethodName + "  Searching User using filter : [" + searchFilter + "]");
  // Search for objects using the filter
  // Search for objects using the filter
      NamingEnumeration<SearchResult> results = context.search(SAMAccountNamePrePop.adSearchBase, searchFilter, searchControls);
      SearchResult searchResult = null;
      while(results.hasMoreElements()) {
      searchResult = (SearchResult) results.nextElement();
      logger.info(className + privateMethodName + " Search Result : [" + searchResult + "]");
      totalResults++;
      }`

使用的搜索过滤器是

String searchFilter = "(&(objectClass=user) (|(&(givenName="+firstInitial+"*)(sn="+lastName+"))(sAMAccountName=("+sAMAccountNameRegex+"))) )";

我已经尝试使用以下 sAMaccountName 搜索过滤器,但没有一个起作用并给出以下异常

  1. String sAMAccountNameRegex=sAMaccountName.Pattern.quote("\\d*");

    异常是:[无效的转义序列:[B@755c9b9c]

    在传递值后,searchfileter 看起来像:

[(&(objectClass=user) (|(&(givenName=C*)(sn=BOND3))(sAMAccountName=(CBOND3\Q\d*\E))) )]

  1. String sAMAccountNameRegex=sAMAccountName+"([0-9]*)$";

    异常是:[[LDAP:错误代码 32 - 0000208D:NameErr:DSID-031001E5,问题 2001 (NO_OBJECT),数据 0,最佳匹配: '']]

    在传递值后 searchfileter 看起来像:

    [(&(objectClass=user) (|(&(givenName=C*)(sn=BOND3))(sAMAccountName=(CBOND3([0-9]*)$))) )]

  2. String sAMAccountNameRegex=sAMAccountName+"\d*";

    异常:[[LDAP:错误代码 32 - 0000208D:NameErr:DSID-031001E5,问题 2001 (NO_OBJECT),数据 0,最佳匹配: '' ]]

    在传递值后 searchfileter 看起来像:

[(&(objectClass=user) (|(&(givenName=C*)(sn=BOND3))(sAMAccountName=(CBOND3\d*))) )]

那么是否可以查询 searchfilter 是字符串和正则表达式组合的 Ldap?

最佳答案

这就是我的尝试及其工作方式:

我正在使用 sAMaccountName* 查询 Activity 目录,我获取用户然后在本地代码中处理正则表达式操作

Attributes attrs = ((SearchResult) answer.next());
String userId=attrs.get("sAMAccountNAme").toString();
if(userId.matches(sAMAccountNameRegex)){
    //business logic goes here
}

关于java - 如何使用 sAMaccountName 在 Activity 目录中搜索用户,其中 sAMaccountName 是 (firstinitial+lastName)+(regex) 以任意数字结尾的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34417371/

相关文章:

java - 针对 Active Directory 的 LDAP 身份验证可接受的 SECURITY_PRINCIPAL 格式是什么?

windows - 使用 Powershell 在 Active Directory 中更新 Active Directory 用户属性

c# - 将主机头添加到 IIS 网站的代码

java - 警告 : ConnectionID:1 Prelogin error: host 127. 0.0.1 端口 3306 意外响应类型:74

java - 简单示例 : HBase + Spring

java - 连接良好时上传图片,Android(后台进程)

java - 使用 java.net.URL 在 java 中构建不正确的 URL?

regex - 当我使用一字符长字符集时,为什么我的正则表达式不匹配?

正则表达式否定集不起作用 golang

javascript - 正则表达式 - 匹配尽可能少的出现次数