2010-08-06 24 views
6

Tôi đã tích hợp Apache Shiro với người dùng giả và nó hoạt động tốt! Nhưng khung này không có hướng dẫn trực tuyến ?! Nó rất khó để có được vào nó như là một người mới bắt đầu.Apache Shiro kết hợp với LDAP

Ai đó có thể giúp tôi tích hợp tích hợp ldap. Tôi đã chỉ tìm thấy thông tin rằng nó không phải là khó khăn: -/

tôi bắt đầu với việc cấu hình các lĩnh vực:

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

Nhưng phải làm gì tiếp theo? Làm thế nào để cấu hình nó?

Thank cho bất kỳ sự giúp đỡ

Trả lời

4

Các AbstractLdapRealm là trừu tượng - bạn không thể khởi tạo nó trực tiếp hoặc khai báo nó như lĩnh vực của bạn. Bạn sẽ phải phân lớp này và triển khai thực hiện các phương thức trừu tượng cần thiết.

Bạn sẽ không cần thực hiện điều này khi bản phát hành Shiro tiếp theo - hiện có vấn đề đang mở (https://issues.apache.org/jira/browse/SHIRO-127) để triển khai cụ thể có thể được sử dụng ngoài hộp nên 95% người dùng cuối sẽ không phải phân lớp AbstractLdapRealm.

HTH,

Les

+0

có ngày phát hành không? – Sven

+1

Chỉ cần cập nhật - bản phân phối Shiro 1.1 mới nhất bao gồm một JndiLdapRealm mới: http://shiro.apache.org/static/current/apidocs/org/apache/shiro/realm/ldap/JndiLdapRealm.html JavaDoc cho thấy cách thức để xác định nó trong cấu hình INI. –

4

Điều này có thể ít được giúp đỡ. Kiểm tra toàn bộ hướng dẫn nó bao gồm xác thực đơn giản và LDAP. http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

+0

Cảm ơn bạn Tôi đã quản lý để làm điều đó. Và trên thực tế, liên kết của bạn đã giúp ích rất nhiều. Nếu ai đó cần giúp đỡ để kết nối shiro với một số ldap đặt bình luận ở đây và liên kết câu hỏi của bạn, tôi sẽ giúp các bạn – Sven

+0

tôi vui vì bạn đã làm :) –

3

Đây là ví dụ hoạt động.

active.ini

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

Code:

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

Những lớp học đó dường như bị bỏ đi với 1.2.2. Có một ví dụ mã với các lớp Shiro hiện tại? – user1069528

+0

@ user1069528 Dường như chúng vẫn tồn tại trong Shiro Core 1.2.3. Bạn đã tải xuống đúng lọ từ trang web của dự án chưa? – JBert

0

nếu sử dụng Spring như khuôn khổ cốt lõi, bạn cũng có thể sử dụng XML bối cảnh ứng dụng để xác định các cõi như:

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

Sau đó chuyển giao vương quốc cho Người quản lý bảo mật của bạn:

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

Sau đó, gọi mã Đăng nhập bất cứ nơi nào bạn muốn.

Các vấn đề liên quan