gpt4 book ai didi

java - Apache shiro LDAP 多个 OU

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:25 25 4
gpt4 key购买 nike

我正在尝试配置 apache shiro 以使用我们的 LDAP 服务器进行身份验证。我对 LDAP 不是很熟悉,所以请原谅我的无知!

在 shiro.ini 中使用以下选项工作正常(用户已通过身份验证):

ldapRealm.userDnTemplate = uid={0},ou=users,dc=mycompany,dc=com

但是,我们公司有多个组织单位 (ou)。如何使 ou 参数采用多个值?我可以用这个吗

ldapRealm.userDnTemplate = uid={0},ou=*,dc=mycompany,dc=com

我只想尝试所有组织部门,直到登录成功。

添加具有不同 ou 的额外 LDAP 领域怎么样:

#ldapRealm1ldapRealm1 = org.apache.shiro.realm.ldap.JndiLdapRealmldapRealm1.userDnTemplate = uid={0},ou=users1,dc=mycompany,dc=comldapRealm1.contextFactory.url = ldap://test.com:389#ldapRealm2ldapRealm2 = org.apache.shiro.realm.ldap.JndiLdapRealmldapRealm2.userDnTemplate = uid={0},ou=users2,dc=mycompany,dc=comldapRealm2.contextFactory.url = ldap://test.com:389#ldapRealm3ldapRealm3 = org.apache.shiro.realm.ldap.JndiLdapRealmldapRealm3.userDnTemplate = uid={0},ou=users3,dc=mycompany,dc=comldapRealm3.contextFactory.url = ldap://test.com:389

这行得通吗?

此外,是否可以在登录页面中添加一个下拉列表,以允许用户选择其组织单位并将其作为参数传递给 ldapRealm ?我应该如何进行呢?

TIA,塞拉菲姆

最佳答案

多个领域都可以正常工作。您只需创建 AuthenticationToken 的子接口(interface),该接口(interface)还指定您要定位的组织单位。

然后,您可以创建 LdapRealm 的子类并更改supports() 方法以返回 true IFF AuthenticationToken 反射(reflect)目标组织单位。例如:

LdapAuthenticationToken extends AuthenticationToken {
String getOrganizationalUnit();
}

LdapUsernamePasswordToken extends UsernamePasswordToken
implements LdapAuthenticationToken {
private String organizationalUnit; //add getter/setter
}

MyLdapRealm extends LdapRealm {
private String organizationalUnit; //add getter/setter
@Override
public boolean supports(AuthenticationToken token) {
return token != null && token instanceof LdapAuthenticationToken &&
this.organizationalUnit.equals(
((LdapAuthenticationToken)token).getOrganizationalUnit());
}

@Override
protected AuthenticationInfo doGetAuthenticatinoInfo(AuthenticationToken token) {
LdapAuthenticationToken ldapToken = (LdapAuthenticationToken)token;
//get the OU here, and do whatever you want with it.
}
}

如果您有多个领域,请注意每个领域可能都有自己的 LDAP 连接池,这可能不如单个共享连接池高效。

如果您希望拥有单个连接池,则需要使用一个领域并根据 OrganizationalUnit 手动制定查询。 LdapAuthenticationToken 在这种情况下也会很有帮助。

关于java - Apache shiro LDAP 多个 OU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9273631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com