Quarkus LDAP获取用户数据 [英] Quarkus LDAP get user data
本文介绍了Quarkus LDAP获取用户数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用一个OpenLDAP服务器对我的Quarkus应用程序上的用户进行身份验证。 一切正常,但我想检索我的用户数据。
我以为它会在方法identity.getAttributes()
中,但这给了我一个空的Map。
以下是一个用户的示例:
# tesla, example.com
dn: uid=tesla,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
objectClass: posixAccount
cn: Nikola Tesla
sn: Tesla
uid: tesla
mail: tesla@ldap.forumsys.com
uidNumber: 88888
gidNumber: 99999
homeDirectory: home
这也是我的ldap配置:
quarkus.security.ldap.enabled=true
quarkus.security.ldap.dir-context.url=ldap://ldap.forumsys.com:389/
quarkus.security.ldap.dir-context.principal=cn=read-only-admin,dc=example,dc=com
quarkus.security.ldap.dir-context.password=password
quarkus.security.ldap.identity-mapping.rdn-identifier=uid
quarkus.security.ldap.identity-mapping.search-base-dn=dc=example,dc=com
quarkus.security.ldap.identity-mapping.attribute-mappings."0".from=cn
quarkus.security.ldap.identity-mapping.attribute-mappings."0".to=groups
quarkus.security.ldap.identity-mapping.attribute-mappings."0".filter=(member=uid={0})
quarkus.security.ldap.identity-mapping.attribute-mappings."0".filter-base-dn=dc=example,dc=com
如何获取我的用户邮件和CN?
提前感谢您的帮助
托马斯
推荐答案
好的,我找到了一个答案,虽然很难看,但确实有效。
因为我找不到如何使用框架获取数据,所以我尝试使用ldapsearch在命令行中获取数据。 因此,我可以通过运行以下命令检索我的用户数据:
ldapsearch -H ldap://ldap.forumsys.com:389/ -x -D "cn=read-only-admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=tesla)"
这给了我:
dn: uid=tesla,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
objectClass: posixAccount
cn: Nikola Tesla
sn: Tesla
uid: tesla
mail: tesla@ldap.forumsys.com
uidNumber: 88888
gidNumber: 99999
homeDirectory: home
现在,身份验证起作用了,我可以从我的SecurityIdentity检索登录名(使用identity.getPrincipal().getName()
),并且我有这个命令为我提供特定用户的数据。我想你明白这一点了。
我在Java中运行此命令并手动检索数据。
以下是Java中的代码:
final String cmd = "ldapsearch -H " + ldapUrl + " -x -D "" + ldapUser + "" -w " + ldapPassword + " -b "" + ldapFilter + "" -LLL "(uid=" + login + ")"";
String[] shellCommand = { "/bin/bash", "-c", cmd };
final Map<String, String> map = new HashMap<>();
Process process = Runtime.getRuntime().exec(shellCommand);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if(line.contains(": ")) {
final String key = line.split(": ")[0];
final String value = line.split(": ")[1];
map.put(key, value);
}
}
return map;
请注意,我每个键只有一个值,因为我感兴趣的数据有一行。
这是我为我的问题找到的答案。 我希望有人能找到更干净的东西。
托马斯
这篇关于Quarkus LDAP获取用户数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文