我正在尝试将基于 Springboot 2.1 的旧代码迁移到 Spring 3.0.8。
这包括 AD 集成。现在 Springboot 2.1 中的 AD 代码工作正常,但是当我迁移到 Springboot 3 时,它就停止工作并开始显示
org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]
尽管我没有对AD方面做任何改变。
这是我的旧代码 -
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider(domain,
ldapUrls, ldapBaseDn);
adProvider.setConvertSubErrorCodesToExceptions(true);
adProvider.setUseAuthenticationRequestCredentials(true);
if (ldapUserDnPattern != null && ldapUserDnPattern.trim().length() > 0) {
adProvider.setSearchFilter("(&(objectClass=user)(sAMAccountName={1}))");
// adProvider.setSearchFilter(ldapUserDnPattern);
}
auth.authenticationProvider(adProvider);
auth.eraseCredentials(false);
}
我的新代码没有太多变化,正如各种文档所建议的那样。
@Bean
public AuthenticationManager authManager(HttpSecurity http) throws Exception {
ActiveDirectoryLdapAuthenticationProvider adProvider =
new ActiveDirectoryLdapAuthenticationProvider(domain, ldapUrls,ldapBaseDn);
adProvider.setConvertSubErrorCodesToExceptions(true);
adProvider.setUseAuthenticationRequestCredentials(true);
adProvider.setSearchFilter("(&(objectClass=user)(sAMAccountName={1}))");
AuthenticationManagerBuilder authenticationManagerBuilder =
http.getSharedObject(AuthenticationManagerBuilder.class);
authenticationManagerBuilder.authenticationProvider(adProvider);
return authenticationManagerBuilder.build();
我尝试实施各种策略和实施,但没有成功。
由于公司政策,我无法共享我的域、ldapUrls 和 ldapBaseDn,但它们在整个过程中都是相同的,并且我使用 Apache Directory Studio 检查了我的代码配置是否正确。
这似乎是一个直接的答案,但您传递的
ldapBaseDn
参数可能存在问题。
语法可能无效。 这里
帖子很旧了。
此外,我已将 LDAP 与 Spring 3.x 集成
参考代码
WebSecurityConfig Bean
@Bean
public LdapTemplate ldapTemplate(){
return new LdapTemplate(ldapContextSource());
}
@Bean
public LdapContextSource ldapContextSource(){
LdapContextSource ldapContextSource = new LdapContextSource();
ldapContextSource.setPassword(pass);
ldapContextSource.setUrl(url);
ldapContextSource.setUserDn(userDn);
return ldapContextSource;
}
@Bean
AuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource) throws Exception {
LdapBindAuthenticationManagerFactory ldapBindAuthenticationManagerFactory =
new LdapBindAuthenticationManagerFactory(contextSource);
ldapBindAuthenticationManagerFactory.setUserSearchBase(searchBase);
ldapBindAuthenticationManagerFactory.setUserSearchFilter("(&(objectClass=user)(sAMAccountName={1}))");
return ldapBindAuthenticationManagerFactory.createAuthenticationManager();
}
这可能会有帮助
如果有帮助,请将答案标记为正确