PrincipalSearcher过滤所有不匹配的记录

时间:2012-11-20 22:08:18

标签: .net directoryservices

有没有办法搜索所有使用PrincipalSearcher不匹配的记录。使用DirectorySearcher,您可以应用(!sn="\*Jay\*")之类的过滤器。换句话说,姓氏不包含序列“Jay”的所有记录。我想知道是否还有使用UserPrincipal参数执行此操作。

2 个答案:

答案 0 :(得分:0)

不幸的是,这不是一个选择。我花了很多时间试图找到一种方法来轻松/有效地进行更高级的搜索。您最接近高级搜索的是一些日期选项,但没有用于文本搜索。

我最终做的是使用LDAP查询单独运行DirectorySearcher。我从搜索返回的唯一属性(最小化结果集大小和提高速度)是DN和对象类型(如果对象类型尚未过滤)。然后,我使用DN创建一个适当类型的新Principal对象,并将其添加到集合中。

整个AccountManagement库的设计考虑了很少的任务(显然),并且很难扩展。我几乎已经退回到使用DirectoryServices进行大多数任务,因为它是应该使用的真正的库。

答案 1 :(得分:0)

我似乎总是在回答旧问题,但这仍然在搜索中,我相信我已经想到了这一点。如果它帮助找到它的人,这就是我设法拼凑的东西。

您要做的是创建自定义[[FATAL] No injection source found for a parameter of type public abstract javax .ws.rs.core.Response com.autotec.controller.DocumentController.uploadFile(java.i o.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at index 0. ; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], p roducedTypes=[text/html], suspended=false, suspendTimeout=0, suspendTimeoutUnit= MILLISECONDS, invocable=Invocable{handler=InstanceBasedMethodHandler{handler=org .fabric3.binding.rs.runtime.container.F3ResourceHandler@5c064de1, handlerClass=c lass org.fabric3.binding.rs.runtime.container.F3ResourceHandler}, definitionMeth od=public abstract javax.ws.rs.core.Response com.autotec.controller.DocumentCont roller.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContent Disposition), parameters=[Parameter [type=class java.io.InputStream, source=file , defaultValue=null], Parameter [type=class com.sun.jersey.core.header.FormDataC ontentDisposition, source=file, defaultValue=null]], responseType=class javax.ws .rs.core.Response}, nameBindings=[]}'] at org.glassfish.jersey.server.ApplicationHandler.initialize(Application Handler.java:467) at org.glassfish.jersey.server.ApplicationHandler.access$500(Application Handler.java:163) at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandl er.java:323) at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.processWithException(Errors.java :286) 并根据需要创建一些自定义搜索规则。默认值相当有限,但您可以创建任何您需要的东西。

您的问题的示例可以像这样处理

AdvancedFilter

为了使用它,您还必须拥有一个实现此目的的自定义public class MyAdvancedFilter : AdvancedFilters { public MyAdvancedFilter(Principal principal) : base(principal) { } public void WhereLastName(string lastName, MatchType match) { // The * is the normal wildcard for LDAP. // Remove *'s for an exact match, or create a parameter to choose what to do. this.AdvancedFilterSet("sn", "*" + lastName + "*", typeof(string), match); } } 对象。

UserPrincipal

现在您已准备好使用此代码。

[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]
public class MyUser : UserPrincipal
{
    public MyUser(PrincipalContext context) : base(context)
    {

    }

    private MyAdvancedFilter searchFilter;
    // use custom search filters
    public new MyAdvancedFilter AdvancedSearchFilter
    {
        get
        {
            if (searchFilter == null)
                searchFilter = new MyAdvancedFilter(this);

            return searchFilter;
        }
    }
}

希望它有所帮助。