2013-03-15 131 views
3

我特林獲得組列表的用戶中的一員,我目前能得到大多數屬性如下我如何獲得的memberOf從LDAP DirContextOperations

CustomLdapUserDetails.Essence essence = new CustomLdapUserDetails.Essence(); 
essence.setDn(dn); 
Object passwordValue = ctx.getObjectAttribute(passwordAttributeName); 
String givennameValue = (String)ctx.getObjectAttribute("givenname"); 
String snValue = (String)ctx.getObjectAttribute("sn"); 
String titleValue = (String)ctx.getObjectAttribute("title"); 
essence.setFirstname(givennameValue); 
essence.setLastname(snValue); 

,但我無法弄清楚如何屬性獲取memberOf屬性。如果我輸出的整個DirContextOperations作爲一個字符串,我得到以下

org.springframework.ldap.core.DirContextAdapter: dn=uid=emp123 {rdn=uid=emp123, 
whenCreated=20110816063203.0Z, 
objectCategory=CN=fompanyPerson,CN=Schema,CN=Configuration,CN={9F17F445-56C4-42D9- 
B7C6-B630FFEA7F07}, badPwdCount=0, otherTelephone=123-456789, businessUnit=IREIRE BU, 
ntAccount=DMN1\emp123, managerID=emp987, objectGUID=5? 
?e6A??????/, [email protected], uid=emp123, companyWorkRelationship=EMP, 
memberOf[0]=CN=ABC IREIRE,OU=AutoGroups,DC=entdir,DC=gtn,DC=com, 
memberOf[1]=CN=azgEntJazzUsers,OU=AutoGroups,DC=entdir,DC=gtn,DC=com, companySite=DBL, 
companyCostCenter=91827, companyBusinessGroup=IREIRE BG, ntDomain=DMN1, instanceType=4, 
corpID=emp123, objectSid= I???&?C?k?J???????, st=XX, badPasswordTime=0, vdejoindn=P- 
ENTDIRXXX-1:uid=emp123,DC=entdirXXX,DC=gtn,DC=com, companySourceSystem=C-WORKSYSTEM, 
objectClass[0]=top, objectClass[1]=person, objectClass[2]=organizationalPerson, 
objectClass[3]=user, objectClass[4]=inetOrgPerson, objectClass[5]=fompanyPerson, 
company=ABC DEV, name=emp123, sn=Smith, exchangeAlias=emp123, telephoneNumber=1-987-6543, 
ntDomainRelative=DMN1, uSNChanged=999111, physicalDeliveryOfficeName=DXI, 
ntAccountRelative=DMN1\emp123, cn=Smith, John, exchangeServer=someServer, 
documentumUserName=Smith JOHN emp123, title=SOFTWARE ENGINEER/DEVELOPER, 
[email protected], msDS-UserAccountDisabled=TRUE, 
managerName=Bloggs, Joe, givenName=John, uSNCreated=18418957, displayName=Smith, John, 
pwdLastSet=629579433359695509, fompanyPersonStatus=A, whenChanged=20120266070711.0Z, 
o=IREIRE BU, distinguishedName=uid=emp123,DC=entdirXXX,DC=gtn,DC=com, eDARevoke=N, 
division=SEF-GL , manager=uid=emp987,DC=entdirXXX,DC=gtn,DC=com, 
exchangeDirectory=SMXZG1DB, samAccountName=emp123, sametimeServer=cvxcluster} 

我需要得到的是每一個的memberOf的CN值轉換成字符串數組,我曾嘗試:

ctx.getObjectAttribute("memberOf[1]")) 
ctx.getObjectAttribute("memberOf")) 
ctx.getObjectAttribute("memberOf=CN")) 

我在網上看過設置的例子,但我找不到任何獲取的例子,是否真的更復雜,然後獲得其他屬性?

任何意見將不勝感激

回答

6

你可能只從最後錯過一個「s」。嘗試:

ctx.getObjectAttributes("memberOf") 

的Javadoc澄清什麼是singularplural形式方法之間的差異。 (即使給定屬性爲多值,前者只返回第一個值。)

+0

我在應用上面的解決方案後得到了對象數組。現在,我想解析那個String對象來獲取經過身份驗證的用戶組,我該怎麼做?我應該分析字符串還是有任何LDAP實用程序,可以給我認證的用戶組? 我正在下面的字符串數組。 cn = admin,cn =用戶,cn = example,cn = org cn = team1,cn = users,cn = example,cn = org cn = team2,cn = users,cn = example,cn = org 從上面的輸出中可以清楚地看到,經過身份驗證的用戶是3個組的成員,即admin,team1,team2 – ved 2013-05-25 03:05:47

0

您是否使用Active Directory作爲LDAP提供者? 並非所有的LDAP提供者都有用戶的memberOF屬性。

正確的方法來獲取用戶的羣體將是搜索組像一個過濾器:

(member=<fully distinguished name of user>) 

返回屬性「CN」。

+0

如果沒有'memberOf'屬性,它只是'正確'*。否則它會慢很多倍,因此很不合適。 – EJP 2017-03-31 00:31:37