您的位置:首页 > 其它

LDAP 的认证问题 Authentication

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

可以看到官网的文档上有个相关的认证的方法 在第10章,但是有一个问题,如果你没有按照文档去配置事物的话 他是可以认证通过的,如果你按照文档去配了事物 再去调用验证发放他会报异常 说你找不到 ContextSource 这是因为在第6章的时候 它把跟服务器连接的id改为contextSourceTarget
但是在LDAP中contextSource这个 不只是一个id那么简单 因为在LDAP的世界里 他有一个接口也叫ontextSource 是用来验证使用的 所以你在不配置事物的时候是可以用的。
接下来上两段代码,事物是与jpa集合好的:

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="ldap://127.0.0.1:389" />
<property name="userDn" value="cn=Directory Manager " />
<property name="password" value="******" />
</bean>
<bean id="contextSourceTarget" class="org.springframework.ldap.transaction.compensating.manager.TransactionAwareContextSourceProxy">
<constructor-arg ref="contextSource" />
</bean>
<bean id="ldapTemplateAuthention" class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSource" />
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSourceTarget" />
</bean>
<bean id="transactionManager" class="com.smarcloud.control.util.ContextSourceAndJpaTransactionManager">
<property name="contextSource" ref="contextSourceTarget"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/><!-- 这个是jpa的 -->
</bean>

<tx:annotation-driven transaction-manager="transactionManager"  />
改成这样就可以以确保你的认证方法是可用的了,同时还会有事物。
这里要结束下为什么要配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 还带异常。
本文出自 “记下就对了” 博客,请务必保留此出处http://jueshizhanhun.blog.51cto.com/4372226/1272001
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: