我正在使用Spring Ldap与需要tls身份验证的openLdap服务器进行交互。为了进行身份验证,我必须将contextSource设置为:
TransactionAwareContextSourceProxy ctx = (TransactionAwareContextSourceProxy) ldapTemplate.getContextSource();
SecureLdapContextSource secureContextSource = new SecureLdapContextSource();
secureContextSource.afterPropertiesSet();
ldapTemplate.setContextSource(secureContextSource);
SecureLdapContextSource在哪里
public void afterPropertiesSet() {
//http://forum.spring.io/forum/spring-projects/data/ldap/33910-ldaps-external-certificate-contains-unsupported-critical-extensions-2-5-29-17
this.setUrl("ldaps://myLdapServer.com:636/");
super.afterPropertiesSet();
Hashtable<String, Object> envProps = new Hashtable<String, Object>();
envProps.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
envProps.put(Context.PROVIDER_URL, "ldaps://myLdapServer.com:636/");
envProps.put(Context.SECURITY_PRINCIPAL, "adminUsername");
envProps.put(Context.SECURITY_CREDENTIALS, "adminPwd");
envProps.put(Context.SECURITY_AUTHENTICATION, "simple");
envProps.put("java.naming.security.protocol", "ssl");
envProps.put("com.sun.jndi.ldap.connect.pool", "true");
envProps.put("java.naming.ldap.factory.socket", "org.springframework.ldap.samples.useradmin.EmblSSLSocketFactory");
System.setProperty("java.naming.ldap.factory.socket", "org.springframework.ldap.samples.useradmin.EmblSSLSocketFactory");
//set the environment
super.setupAuthenticatedEnvironment(envProps, keyStore, keyStorePassword);
// set the base environment again
super.setBaseEnvironmentProperties(envProps);
System.setProperty("javax.net.ssl.keyStore", keyStore);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
// it is necessary to call super.afterPropertiesSet() again!!!
super.afterPropertiesSet();
}
之后,我已经能够通过这样的电话验证管理员:
ldapTemplate.authenticate(queryAdmin, password);
之后是我的问题。我想使用unbind方法从ldap中删除用户: ldapTemplate.unbind( “dnOfMyWorsteColeague”);
在测试中运行它我从ldap服务器获得以下异常: [LDAP:错误代码8 - 修改需要身份验证]
所以,我不能(因为我正在使用旧的ldap接口,没有Spring Ldap)进行身份验证并保持会话执行只允许管理员执行的命令。
有什么想法吗?我想用Spring Ldap ......
感谢您的帮助, 马可
答案 0 :(得分:0)
我知道这个Q超级老了,我对LDAP比较新,但我认为unbind()
用于关闭LDAP连接,而不是删除用户。为此,您可以使用delete()