【发布时间】:2018-03-20 13:50:01
【问题描述】:
我正在尝试针对 LDAP 服务器验证一组凭据,并且我能够成功验证它们。现在我正在尝试获取登录到服务器的用户的全名或显示名称。我无法得到同样的结果。作为 LDAP 概念的新手,我无法找到获取用户完整显示名称的方法。有人可以帮助我如何获取登录用户的完整显示名称。
下面是正在使用的 shiro.ini 文件:
[main]
activeDirectoryRealm =
org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
activeDirectoryRealm.systemUsername = adminusername
activeDirectoryRealm.systemPassword = adminpswd
activeDirectoryRealm.searchBase = "OU=User Accounts,DC=dmn,DC=net"
activeDirectoryRealm.url = ldaps://localhost:389
我的Java代码如下:
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class ExampleActiveDirectory {
public static final String userName = "myusername";
public static final String password = "mypassword";
public static void main(String[] args)
{
//Factory<SecurityManager> factory = new IniSecurityManagerFactory("N:\\workspace\\LdapAuthentication\\src\\auth.ini");
Factory<SecurityManager> factory = new IniSecurityManagerFactory("N:\\workspace\\LdapAuthentication\\src\\shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager( securityManager );
System.out.println( "userName is : " +userName);
System.out.println( "password is : " +password);
UsernamePasswordToken token = new UsernamePasswordToken( userName,password );
Subject currentUser = SecurityUtils.getSubject();
try
{
//currentUser.login( token ) ;
securityManager.login(currentUser,token).isAuthenticated();
System.out.println( "We've authenticated! :)" );
}
catch ( AuthenticationException e )
{
System.out.println( "We did not authenticate :(" );
e.printStackTrace();
}
}
}
【问题讨论】:
-
currentUser.getPrincipal() 会给你smth。就像用户 john doe 的 j.doe 一样,以防您搜索它。否则,请提供您希望看到的示例结果。
-
我正在寻找类似的结果:如果我输入用户名作为 jdoe,则代码需要提供输出,例如 - john doe
-
那么我认为你需要扩展 Shiro 的 ActiveDirectoryRealm 类并查看它的方法“getRoleNamesForUser”。使用 searchBase 和 searchFilter 在 AD 上执行搜索以检索结果。在这种情况下,您可以编写自己的方法,该方法使用搜索库和过滤器,然后查找属性“name”而不是“memberOf”。此属性应为您提供所需的值。
标签: java active-directory ldap shiro