Мы используем Apache Shiro для аутентификации и авторизации пользователей с помощью нашего активного каталога.
Аутентификация пользователя и групп сопоставления работает отлично, используя следующую конфигурацию:
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?