有没有办法搜索所有使用PrincipalSearcher不匹配的记录。使用DirectorySearcher,您可以应用(!sn="\*Jay\*")
之类的过滤器。换句话说,姓氏不包含序列“Jay”的所有记录。我想知道是否还有使用UserPrincipal参数执行此操作。
答案 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;
}
}
}
希望它有所帮助。