AD域用户认证登录(包含SSL)-UnboundID LDAP SDK方式

在这里插入图片描述

前言

这篇比较精华,亲身踩坑两天完成,利用UnboundID LDAP SDK完成对AD域用户进行普通登录和ssl登录场景实现,挺实用来着。

普通登录

package com.example.demo.controller;

import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.ldap.sdk.LDAPException;
import lombok.extern.slf4j.Slf4j;

/**
 * @author apollo
 * @description
 * @date 2021年12月14日 16:59
 */
@Slf4j
public class AdLogin {
    public static void main(String[] args) {
        String host = "your host";
        //一般普通登录端口为389
        Integer port = 389;
        //用户登录名两种格式 userPrincipalName和sAMAccountName
        //userPrincipalName : 账号@域 lisi@test.com
        //sAMAccountName : 域\账号 test\lisi
        String userName = "lisi@test.com";
        String password = "123456";
        LDAPConnection connection = new LDAPConnection();
        try {
            connection = new LDAPConnection(host, port, userName, password);
            log.info("ad域账号登录成功!");
        } catch (LDAPException e) {
            log.info("ad域账号登录失败:{}", e.getMessage());
            log.error(e.getMessage(), e);
        } finally {
            connection.close();
        }
    }
}

SSL登录 且 筛选获取某用户组下用户

package com.example.demo.controller;

import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.ldap.sdk.SearchResult;
import com.unboundid.ldap.sdk.SearchResultEntry;
import com.unboundid.ldap.sdk.SearchScope;
import com.unboundid.util.ssl.SSLUtil;
import com.unboundid.util.ssl.TrustAllTrustManager;
import lombok.extern.slf4j.Slf4j;

import javax.naming.directory.SearchControls;
import javax.net.ssl.SSLSocketFactory;
import java.util.Iterator;
import java.util.List;

/**
 * @author apollo
 * @description
 * @date 2022年02月14日 16:59
 */
@Slf4j
public class AdLogin {
    public static void main(String[] args) {
        LDAPConnection connection = new LDAPConnection();
        String host = "www....com";
        String userName = "lisi@test.bb.com";
        String baseDn = "DC=test,DC=bb,DC=COM";
        String password = "123456";
        try {
            SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
            SSLSocketFactory sslSocketFactory = sslUtil.createSSLSocketFactory();
            connection = new LDAPConnection(sslSocketFactory);
            connection.connect(host, 636);
            connection.bind(userName, password);
            //查询某个用户组里面的用户
            String filter = "(&(memberOf:1.2.840.113556.1.4.1941:=CN=user-group,OU=haha,DC=test,DC=bb,DC=COM))";
            //返回值
            String retrunedAtts[] = {"name"};
            SearchResult search = connection.search(baseDn, SearchScope.valueOf(SearchControls.SUBTREE_SCOPE), filter, retrunedAtts);
            List<SearchResultEntry> searchEntries = search.getSearchEntries();
            Iterator<SearchResultEntry> iterator = searchEntries.iterator();
            while (iterator.hasNext()) {
                log.info("{}", iterator.next());
            }
        } catch (Exception e) {
            log.info("ad域账号登录失败:{}", e.getMessage());
        } finally {
            connection.close();
        }
    }
}

这篇算是跨年篇吧…哈哈hahhaa…从21年的12月一直拖到今天才发…羞涩…

就 先 说 到 这 \color{#008B8B}{ 就先说到这}
在 下 A p o l l o \color{#008B8B}{在下Apollo} Apollo
一 个 爱 分 享 J a v a 、 生 活 的 小 人 物 , \color{#008B8B}{一个爱分享Java、生活的小人物,} Java
咱 们 来 日 方 长 , 有 缘 江 湖 再 见 , 告 辞 ! \color{#008B8B}{咱们来日方长,有缘江湖再见,告辞!}

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Spring Boot集成LDAP实现AD用户认证用户检索和密码重置,需要进行以下步骤: 1. 添加Spring LDAP和Spring Security依赖 首先,在pom.xml文件中添加Spring LDAP和Spring Security依赖: ```xml <dependency> <groupId>org.springframework.ldap</groupId> <artifactId>spring-ldap-core</artifactId> <version>2.3.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-ldap</artifactId> <version>5.4.6</version> </dependency> ``` 2. 配置LDAP连接信息 在application.properties文件中配置LDAP连接信息,如下所示: ```properties # LDAP server URL spring.ldap.urls=ldap://ad.example.com:389/ # LDAP base DN spring.ldap.base=dc=example,dc=com # LDAP user DN spring.ldap.username=cn=admin,dc=example,dc=com # LDAP user password spring.ldap.password=secret ``` 3. 配置Spring Security认证 在SecurityConfig类中配置Spring Security认证: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .defaultSuccessUrl("/home") .failureUrl("/login?error=true") .permitAll() .and() .logout() .logoutSuccessUrl("/login") .permitAll(); } @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth .ldapAuthentication() .userDnPatterns("uid={0},ou=people") .groupSearchBase("ou=groups") .contextSource() .url("ldap://ad.example.com:389/dc=example,dc=com") .and() .passwordCompare() .passwordEncoder(new BCryptPasswordEncoder()) .passwordAttribute("userPassword"); } } ``` 这里,我们使用LDAP进行用户认证用户DN格式为`uid={0},ou=people`,组DN为`ou=groups`。同时,我们使用BCrypt密码编码器进行密码加密。 4. 实现用户检索和密码重置 我们可以使用LdapTemplate类来检索用户和重置密码。例如,检索所有用户的代码如下: ```java @Autowired private LdapTemplate ldapTemplate; public List<String> findAllUsers() { return ldapTemplate.search( LdapQueryBuilder.query().where("objectclass").is("person"), (AttributesMapper<String>) attrs -> (String) attrs.get("cn").get() ); } ``` 重置密码的代码如下: ```java @Autowired private LdapTemplate ldapTemplate; public void resetPassword(String username, String newPassword) { Name dn = LdapNameBuilder .newInstance() .add("ou", "people") .add("uid", username) .build(); ModificationItem[] mods = new ModificationItem[] { new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userPassword", newPassword)) }; ldapTemplate.modifyAttributes(dn, mods); } ``` 这里,我们使用LdapNameBuilder类构建用户DN,然后使用ModifyAttributes方法重置用户密码。 以上就是使用Spring Boot集成LDAP实现AD用户认证用户检索和密码重置的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值