在 LDAP 中搜索用户(Wildfly)

Search user in LDAP(Wildfly)

我的应用程序正在使用 LDAP 进行用户登录。

Wildfly 配置:

<security-domain name="LDAPAuth">
    <authentication>
        <login-module code="LdapExtended" flag="required">
            <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
            ....
        </login-module>
        <login-module name="Database-role" code="Database" flag="optional">
            <module-option name="password-stacking" value="useFirstPass"/>
            .....
        </login-module>
        <login-module name="Database-default" code="Database" flag="optional">
            <module-option name="password-stacking" value="useFirstPass"/>
            ....
        </login-module>
    </authentication>
</security-domain>

我的问题是如何在应用程序中搜索ldap 用户?我想增加在 ldap 中搜索其他用户的可能性(对于已经登录的用户)。

可以连接到 WildFly 管理 API 并读取安全域配置,但您不应该这样做。

如果您有其他方式,请不要混合使用服务器管理配置和应用程序配置。

向应用程序提供 LDAP 配置(例如,部署描述符中的上下文参数或使用 属性 文件)然后执行某项操作。喜欢:

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUrl);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, user);
env.put(Context.SECURITY_CREDENTIALS, password);
final LdapContext ctx = new InitialLdapContext(env, null);
final SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<?> namingEnum = ctx.search("dc=mycompany,dc=example", "(uid=*)", searchControls);
while (namingEnum.hasMore()) {
    // TODO
}
namingEnum.close();
ctx.close();