91.9. Samples
在上面的 Spring 配置后,以下代码示例发送一个 LDAP 请求,以过滤成员的搜索组。然后,从响应中提取通用名称。
ProducerTemplate template = exchange.getContext().createProducerTemplate(); Collection<SearchResult> results = template.requestBody( "ldap:ldapserver?base=ou=mygroup,ou=groups,ou=system", "(member=uid=huntc,ou=users,ou=system)", Collection.class); if (results.size() > 0) { // Extract what we need from the device's profile Iterator resultIter = results.iterator(); SearchResult searchResult = (SearchResult) resultIter.next(); Attributes attributes = searchResult.getAttributes(); Attribute deviceCNAttr = attributes.get("cn"); String deviceCN = (String) deviceCNAttr.get(); // ... }
ProducerTemplate template = exchange.getContext().createProducerTemplate();
Collection<SearchResult> results = template.requestBody(
"ldap:ldapserver?base=ou=mygroup,ou=groups,ou=system",
"(member=uid=huntc,ou=users,ou=system)", Collection.class);
if (results.size() > 0) {
// Extract what we need from the device's profile
Iterator resultIter = results.iterator();
SearchResult searchResult = (SearchResult) resultIter.next();
Attributes attributes = searchResult.getAttributes();
Attribute deviceCNAttr = attributes.get("cn");
String deviceCN = (String) deviceCNAttr.get();
// ...
}
如果不需要特定的过滤器 - 例如,您只需要查找单个条目 - 指定通配符过滤器表达式。例如,如果 LDAP 条目具有通用名称,请使用如下过滤器表达式:
(cn=*)
(cn=*)
91.9.1. 使用凭证绑定
Camel 最终用户授予本示例代码,其用于使用凭据绑定到 ldap 服务器。
Properties props = new Properties(); props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); props.setProperty(Context.PROVIDER_URL, "ldap://localhost:389"); props.setProperty(Context.URL_PKG_PREFIXES, "com.sun.jndi.url"); props.setProperty(Context.REFERRAL, "ignore"); props.setProperty(Context.SECURITY_AUTHENTICATION, "simple"); props.setProperty(Context.SECURITY_PRINCIPAL, "cn=Manager"); props.setProperty(Context.SECURITY_CREDENTIALS, "secret"); DefaultRegistry reg = new DefaultRegistry(); reg.bind("myldap", new InitialLdapContext(props, null)); CamelContext context = new DefaultCamelContext(reg); context.addRoutes( new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start").to("ldap:myldap?base=ou=test"); } } ); context.start(); ProducerTemplate template = context.createProducerTemplate(); Endpoint endpoint = context.getEndpoint("direct:start"); Exchange exchange = endpoint.createExchange(); exchange.getIn().setBody("(uid=test)"); Exchange out = template.send(endpoint, exchange); Collection<SearchResult> data = out.getMessage().getBody(Collection.class); assert data != null; assert !data.isEmpty(); System.out.println(out.getMessage().getBody()); context.stop();
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.setProperty(Context.PROVIDER_URL, "ldap://localhost:389");
props.setProperty(Context.URL_PKG_PREFIXES, "com.sun.jndi.url");
props.setProperty(Context.REFERRAL, "ignore");
props.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
props.setProperty(Context.SECURITY_PRINCIPAL, "cn=Manager");
props.setProperty(Context.SECURITY_CREDENTIALS, "secret");
DefaultRegistry reg = new DefaultRegistry();
reg.bind("myldap", new InitialLdapContext(props, null));
CamelContext context = new DefaultCamelContext(reg);
context.addRoutes(
new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("ldap:myldap?base=ou=test");
}
}
);
context.start();
ProducerTemplate template = context.createProducerTemplate();
Endpoint endpoint = context.getEndpoint("direct:start");
Exchange exchange = endpoint.createExchange();
exchange.getIn().setBody("(uid=test)");
Exchange out = template.send(endpoint, exchange);
Collection<SearchResult> data = out.getMessage().getBody(Collection.class);
assert data != null;
assert !data.isEmpty();
System.out.println(out.getMessage().getBody());
context.stop();