LDAP实现AD域账号验证 - Java/SpringBoot

前言

本文描述如何使用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 就可以在控制台看到验证的结果了。

源码下载

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值