2010-08-06 3 views
6

Я объединил Apache Shiro с манекеном, и он отлично работает! Но у этой рамки нет обучающих онлайн! Очень трудно попасть в него как новичок.Apache Shiro в сочетании с LDAP

Может кто-нибудь помочь мне интегрировать интеграцию ldap. Я только нашел информацию о том, что это не так уж сложно: -/

Я начал с настройкой царством:

[main] 
    myRealm = org.apache.shiro.realm.ldap.AbstractLdapRealm 

Но что делать дальше? Как его настроить?

Спасибо за любую помощь

ответ

4

AbstractLdapRealm абстрактна - вы не можете создать его экземпляр непосредственно или объявить его в качестве области. Вам придется подклассифицировать это и реализовать необходимые абстрактные методы.

Вам не нужно будет делать это при следующем выпуске Shiro - в настоящее время проблема открыта (https://issues.apache.org/jira/browse/SHIRO-127), чтобы иметь конкретную реализацию, которая может быть использована из коробки, поэтому 95% конечных пользователей не будут должны подклассифицировать AbstractLdapRealm.

НТН,

Les

+0

Есть ли дата выпуска? – Sven

+1

Просто обновление - последний дистрибутив Shiro 1.1 включает в себя новый JndiLdapRealm: http://shiro.apache.org/static/current/apidocs/org/apache/shiro/realm/ldap/JndiLdapRealm.html JavaDoc показывает, как для определения его в конфигурации INI. –

4

Это может быть немного помочь. Проверьте весь учебник, который охватывает простые и LDAP-аутентификацию. http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

+0

Спасибо, я уже успел это сделать. И на самом деле ваша ссылка очень помогла. Если кому-то нужна помощь в подключении сиро к некоторому ldap, поместите здесь комментарий и соедините свой вопрос, я помогу вам, ребята, – Sven

+0

. Я рад, что вы это сделали :) –

3

Настоящий рабочий пример.

active.ini

ldapRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm 
ldapRealm.url = ldap://ldapserver:389 

Код:

Factory<SecurityManager> ldapFactory = new IniSecurityManagerFactory("classpath:active.ini"); 
SecurityManager sManager = ldapFactory.getInstance(); 
SecurityUtils.setSecurityManager(sManager); 

Subject currentUser = SecurityUtils.getSubject(); 

     if (!currentUser.isAuthenticated()) { 
      UsernamePasswordToken token = new UsernamePasswordToken("user", "password"); 
      try { 
       currentUser.login(token); 
      } catch (UnknownAccountException ex) { 
       logger.info("Unknown user"); 
      } catch (IncorrectCredentialsException ex) { 
       logger.info("Incorrect credentials"); 
      } catch (LockedAccountException ex) { 
       logger.info("Account is Locked"); 
      } catch (AuthenticationException ex) { 
       logger.info("Authentication Exception"); 
      } 
     } 

     logger.info("User [" + currentUser.getPrincipal() +"] logged succesfully"); 
     currentUser.logout(); 
+0

Эти классы, кажется, сброшены с 1.2.2. Есть ли пример кода с текущими классами Shiro? – user1069528

+0

@ user1069528 Кажется, они все еще присутствуют в Shiro Core 1.2.3. Вы загрузили правильную банку с веб-сайта проекта? – JBert

0

при использовании Spring в качестве основы ядра, вы также можете использовать контекстное приложение XML, чтобы определить сферы, как:

<bean id="ldapRealm" class="org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm"> 
      <property name="url" value="ldap:/ldapserver:389" /> 
    </bean> 

Затем передайте управление вашему диспетчеру безопасности:

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 
    <property name="realm" ref="ldapRealm" /> 
</bean> 

Затем введите код входа в систему, где хотите.

Смежные вопросы