1
LDAPサーバーに対して一連の資格情報を認証しようとしましたが、それらを正常に認証できました。今、サーバーにログインしているユーザーのフルネームまたは表示名を取得しようとしています。同じことができない。 LDAPの概念を初めて知っているので、ユーザーの完全な表示名を取得する方法を見つけることができません。 。いくつかを以下にADとApache shiroを使用して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は()あなたがなめらか与えるだろう。 john doeのようなj.doeのようなものです。それ以外の場合は、表示したい結果の例を提供してください。 –
私は、次のような結果を探していました。jdoeとしてユーザー名を入力した場合、コードは次のような出力を提供する必要があります。 – Arjun
次にShiroのActiveDirectoryRealmクラスから拡張し、 "getRoleNamesForUser" searchBaseとsearchFilterを使用して結果を取得すると、AD上で検索が実行されます。このような場合は、検索ベースとフィルタを使用して独自のメソッドを作成し、「memberOf」ではなく「name」属性を探します。この属性は、あなたが探している価値を与えるはずです。 –