最近一直在ldap开发项目中 对ldap方方面面都接触到很多 之前很多都是基本的操作,增删改查,配事物,连接池,这些只要会用spring的人应该都可以很轻松的弄出来,其实spring-ldap的提供了很好的说明。接下来 说下认证的问题,这个是我今天才弄好的。

   可以看到官网的文档上有个相关的认证的方法 在第10章,但是有一个问题,如果你没有按照文档去配置事物的话 他是可以认证通过的,如果你按照文档去配了事物 再去调用验证发放他会报异常 说你找不到    ContextSource    这是因为在第6章的时候 它把跟服务器连接的id改为contextSourceTarget

但是在LDAP中contextSource这个 不只是一个id那么简单 因为在LDAP的世界里 他有一个接口也叫ontextSource   是用来验证使用的 所以你在不配置事物的时候是可以用的。

接下来上两段代码,事物是与jpa集合好的:


 
     
     
     

 
   

   
    
   

   

 
     
     
 
                                                                                                                        
 

改成这样就可以以确保你的认证方法是可用的了,同时还会有事物。

这里要结束下为什么要配2个ldapTemplate, 主要原因是在在于class="org.springframework.ldap.transaction.compensating.manager.TransactionAwareContextSourceProxy"spring的这里代理里面还不支持contextSource的验证(源码没做完很坑爹),所以单独写一个"ldapTemplateAuthention"用来单独做验证使用,"ldapTemplate"就做我们正常业务与事物。

下面是认证方法,官网拔下来的0.0:


public boolean authentication(String uid){
    CollectingAuthenticationErrorCallback errorCallback = new CollectingAuthenticationErrorCallback();
     String filter = "(&(objectclass=inetOrgPerson)(uid=" + uid + "))";
    boolean result = ldapTemplateAuthention.authenticate("", filter.toString(), "123456", errorCallback);
    if (!result) {
      Exception error = errorCallback.getError();
      // error is likely of type org.springframework.ldap.AuthenticationException
      error.printStackTrace();
}
    return result;
}

OK,认证成功为true 不成功就是false 还带异常。