私たちは、Active Directoryを使用してユーザーを認証し、認可するためのApache史郎を使用しています。ユーザーマッピンググループの認証Apache ShiroでActiveDirectoryRealmを使用しているときにLDAPフィールドを検索するにはどうすればよいですか?
だけで罰金、次の設定を使用して動作します:
adRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
adRealm.searchBase = "OU=MYORGANIZATION,DC=MYDOMAIN,DC=COM"
adRealm.groupRolesMap = "CN=SOMEREADGROUP":"read","CN=SOMEMODIFYGROUP":"modify","CN=SOMEADMINGROUP":"admin"
adRealm.url = ldaps://my.ad.url:636
adRealm.systemUsername= systemuser
adRealm.systemPassword= secret
adRealm.principalSuffix= @myorganization.mydomain.com
私は、次の行を使用して、史郎に認証を行うことができます。
String user = "someuser";
String password = "somepassword";
Subject currentUser = SecurityUtils.getSubject();
if (!currentUser.isAuthenticated()){
UsernamePasswordToken token = new UsernamePasswordToken (user,
password);
token.setRememberMe (true);
currentUser.login (token);
}
現在より多くのユーザー情報を取得したいです私たちのActiveDirectoryから。 Apache Shiroを使ってどうすればいいですか?私はドキュメンテーションでそれについて何も見つけることができませんでした。 ActiveDirectoryRealmのソースコードで
私は、この行を見つけました:
NamingEnumeration answer = ldapContext.search(searchBase, searchFilter, searchArguments, searchCtls);
だから、答えの最初の部分は明確である:それで何かを検索しLdapContextのを使用しています。しかし、私はどのようにLdapContextを取得できますか?
、。しかし、ActiveDirectoryRealmを拡張しても、shiro.iniから読み込んだときに作成されたインスタンスを取得するにはどうすればよいですか?可能な解決策の1つは、ActiveDirectoryRealmをSingletonとして拡張した新しいクラスを作成することです。別の考えがありますか? はい:クエリiに既に存在するコンテキストを再利用したいです。 e。ユーザーの名前と電子メールアドレス。 –
ありがとうございました! ADレルムを拡張することはやりました。私は、iniファイルを何らかの形で解析するときにインスタンスを作成する可能性があるはずだと考えましたが、可能性を見つけることができませんでした。私は今シングルトンアプローチを使用してそれを解決しました。私のADRealmのコンストラクタが呼び出されると、インスタンスを静的フィールドに保存します。クラスは現在、既存のLDAPコンテキストを使用してADからより多くの情報を取得します。 –