LDAP实现AD域账号验证

您所在的位置:网站首页 AD域管理员账号无法认证ldap LDAP实现AD域账号验证

LDAP实现AD域账号验证

2024-07-09 23:11| 来源: 网络整理| 查看: 265

前言

本文描述如何使用springboot对接LDAP服务器实现用户输入用户名密码之后对其进行验证。 步骤主要参考了这篇文章,在对接上遇到了PartialResultException相关的一些报错,主要查阅这个大佬的文章,最终把报错解决了。

步骤

这里先假设所给的LADP服务器是:music.baidu.com:389,服务器用户名密码是:admin/admin123,测试账号是:test/test123。

引入依赖 org.springframework.boot spring-boot-starter-data-ldap 配置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的区别: [email protected] 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 就可以在控制台看到验证的结果了。

源码下载

LDAP实现AD域账号验证

总结

只是用来验证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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3