问题描述
我在我的 Sprint 启动应用程序中使用 spring-ldap-core 插件.基本上,LDAPTemplate - http://docs.spring.io/spring-ldap/docs/current/apidocs/org/springframework/ldap/core/LdapTemplate.html
I am using spring-ldap-core plugin in my Sprint boot application. Basically, the LDAPTemplate - http://docs.spring.io/spring-ldap/docs/current/apidocs/org/springframework/ldap/core/LdapTemplate.html
我基本上想使用 Spring LDAP API 将下面的 xml 配置转换为 java,并希望避免使用 Spring Security.
I basically want to convert the xml configuration below into java using Spring LDAP API and want to avoid using spring security.
我要转换的xml配置是-
The xml configuration that I want to convert is -
<ldap-server id="ldapServer" url="ldap://ad.company.com:389" manager-dn="CN=serviceaccount,OU=Service Accounts,DC=ad,DC=company,DC=com" manager-password="password"/> <authentication-manager> <ldap-authentication-provider server-ref="ldapServer" user-search-base="dc=ad,dc=company,dc=com" user-search-filter="sAMAccountName={0}" group-search-filter="member={0}" group-search-base="ou=Groups,dc=ad,dc=company,dc=com" group-role-attribute="cn"/> </authentication-manager>
下面是我的java代码-
Here is my java code below-
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.LdapContextSource; import org.springframework.ldap.authentication.DefaultValuesAuthenticationSourceDecorator; @Configuration public class LdapConfiguration { @Bean public LdapContextSource contextSource(){ LdapContextSource contextSource = new LdapContextSource(); contextSource.setUrl("ldap://ad.company.com:389"); contextSource.setBase("DC=ad,DC=company,DC=com"); contextSource.setUserDn("CN=serviceaccount,OU=Service Accounts,DC=ad,DC=company,DC=com"); contextSource.setPassword("password"); contextSource.afterPropertiesSet(); return contextSource; } @Bean public LdapTemplate ldapTemplate(){ LdapTemplate template = new LdapTemplate(contextSource()); try { template.afterPropertiesSet(); } catch (Exception e) { e.printStackTrace(); } return template; } }
这就是我尝试调用身份验证的方式 -如果发生身份验证,此代码段所属的方法将返回一个布尔值
This is how I am trying to invoke authentication - The method that this snippet is a part of returns a boolean value if authentication happens
AndFilter filter = new AndFilter(); filter.and(new EqualsFilter("sAMAccountName", userloginName)); return ldapTemplate.authenticate("OU=Service Accounts", filter.encode(), userPassword);
这不起作用,我得到的错误是:
This is not working and the error I get is that :
No results found for search, base: 'OU=Service Accounts'; filter: '(sAMAccountName=usernameIinput)'.
我想知道如何使用 LDAP API 配置以下 xml 属性?
I want to know how the following xml properties can be configured using LDAP API?
group-search-filter="member={0}" group-search-base="ou=Groups,dc=ad,dc=company,dc=com" group-role-attribute="cn"/>
另外,我还缺少什么?为什么这不起作用?任何帮助将不胜感激!
Also, what else am I missing? Why is this not working? Any help will be really appreciated!
推荐答案
我能够解决这个问题.
//使用LDAPTemplate的LDAP连接
//LDAP connection using LDAPTemplate
@Configuration public class LdapConfiguration { @Bean public LdapContextSource contextSource(){ LdapContextSource contextSource = new LdapContextSource(); contextSource.setUrl("ldap://companyurl.com:389"); contextSource.setUserDn("CN=serviceaccount,OU=Service Accounts,DC=ad,DC=company,DC=com"); contextSource.setPassword("secretpassword"); return contextSource; } @Bean public LdapTemplate ldapTemplate(){ LdapTemplate template = new LdapTemplate(contextSource()); return template; } }
//认证部分
AndFilter filter = new AndFilter(); filter.and(new EqualsFilter("mailNickname", username)); Boolean authenticate = ldapTemplate.authenticate(base, filter.encode(), userpassword);