前言
本文描述如何使用springboot对接LDAP服务器实现用户输入用户名密码之后对其进行验证。
步骤主要参考了这篇文章,在对接上遇到了PartialResultException相关的一些报错,主要查阅这个大佬的文章,最终把报错解决了。
步骤
这里先假设所给的LADP服务器是:music.baidu.com:389,服务器用户名密码是:admin/admin123,测试账号是:test/test123。
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
配置yml参数
spring:
##AD认证
ldap:
##AD服务器IP,默认端口389
urls: ldap://music.baidu.com:389
##登录账号
username: admin
##密码
password: admin123
#distinguishedName的部分节点
base: DC=music,DC=baidu,DC=com
配置类读取配置
@Configuration
public class LdapConfig {
@Value("${spring.ldap.urls}")
private String ldapUrl;
@Value("${spring.ldap.username}")
private String userName;
@Value("${spring.ldap.password}")
private String passWord;
@Value("${spring.ldap.base}")
private String base;
@Bean
public LdapContextSource ldapContextSource(){
LdapContextSource source = new LdapContextSource();
source.setBase(base);
source.setUrl(ldapUrl);
source.setPassword(passWord);
source.setUserDn(userName);
return source;
}
@Bean
public LdapTemplate ldapTemplate(){
return new LdapTemplate(ldapContextSource());
}
}
Service类实现验证
public interface LdapService {
boolean ldapAuth(String username, String passWord);
}
@Service
public class LdapServiceImpl implements LdapService {
@Autowired
private LdapTemplate ldapTemplate;
@Override
public boolean ldapAuth(String username, String passWord) {
ldapTemplate.setIgnorePartialResultException(true);
EqualsFilter filter = new EqualsFilter("sAMAccountName",username);
return ldapTemplate.authenticate("",filter.toString(),passWord);
}
}
其中比较重要的是:ldapTemplate.setIgnorePartialResultException(true);
,没有这个的话,会报PartialResultException的错误。如果你也报这样的错误,那请把这段加上。
其中filter使用了sAMAccountName,关于这里为什么使用sAMAccountName其实是因为windows的AD域控帐号就分两种userprincipalname和sAMAccountName。
userprincipalname或sAMAccountName的区别:
userprincipalname=name@area.com
sAMAccountName=name
Controller测试
@RestController
public class DemoController {
@Autowired
private LdapService ldapService;
@GetMapping("/ap")
public Boolean ap() {
return ldapService.ldapAuth("test", "test123");
}
}
启动之后访问:http://localhost:8087/ap 就可以在控制台看到验证的结果了。
源码下载
总结
只是用来验证window的AD用户账号的话,使用LdapTemplate就可以了,不要忘记设置:ldapTemplate.setIgnorePartialResultException(true);
参考
https://blog.csdn.net/qq_40365331/article/details/102921793
https://www.it610.com/article/1293764933611233280.htm
https://stackoverflow.com/questions/37486159/springs-ldaptemplate-search-partialresultexception-unprocessed-continuation-r