2012-03-16 57 views
0

我想通過tomcat使用我的LDAP中的組來處理對我的webapp(例如:管理員,簡單用戶,開發人員等)的訪問。 如果我不使用任何種類的組,我現在可以使用ldap在我的webapp上登錄。Java EE:通過tomcat + ldap進行身份驗證

這裏是我的代碼示例相關:

的web.xml:

<security-constraint> 
    <display-name>Test</display-name> 
    <web-resource-collection> 
     <web-resource-name>Administrative Area</web-resource-name> 
     <url-pattern>/admin.html</url-pattern> 
     <url-pattern>/blabla.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>TOTOAdmins</role-name> 
    </auth-constraint> 
</security-constraint> 
<security-constraint> 
    <display-name>Tomcat Server Configuration Security Constraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>Protected Area</web-resource-name> 
     <url-pattern>/users/*</url-pattern> 
     <url-pattern>/login</url-pattern> 
     <url-pattern>/error</url-pattern> 
     <url-pattern>/welcome</url-pattern> 
     <url-pattern>/home.do</url-pattern> 
     <url-pattern>/out.do</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>Form-Based Authentication </realm-name> 
    <form-login-config> 
     <form-login-page>/login</form-login-page> 
     <form-error-page>/error</form-error-page> 
    </form-login-config> 
</login-config> 
<security-role> 
    <role-name>TOTOAdmins</role-name> 
</security-role> 
<security-role> 
    <role-name>*</role-name> 
</security-role> 
<welcome-file-list> 
    <welcome-file>welcome</welcome-file> 
</welcome-file-list> 

我們可以在這個樣本taht看到我想給訪問一些網頁給所有用戶,但只有屬於TOTOAdmins的用戶可以訪問blabla.jsp & admin.html。

此刻所有人(無論他們的團體)都有權限訪問該頁面,但沒有人可以訪問blabla.jsp & admin.html。

的server.xml:

<Host name="localhost" appBase="webapps" 
      unpackWARs="true" autoDeploy="true"> 
      <Context path="/portal_re" debug="0" reloadable="true" docBase="portal_re"> 
     <Realm className="org.apache.catalina.realm.JNDIRealm" 
       debug="99" 
       connectionURL="ldap://XX.X.XX.XXX:XXX" 
       connectionName="cn=XXXXXX,ou=abc,dc=abcdef,dc=xyz" 
       connectionPassword="XXXXXXX" 
       userBase="ou=abc,dc=abcdef,dc=xyz" 
       userSearch="(name={0})" 
       userSubtree="true" 
       userRoleName="memberOf" 
       roleBase="ou=abc,dc=abcdef,dc=xyz" 
       roleSearch="(uniqueMember={0})" 
       roleSubtree="true" 
       roleName="cn" 
/> 
</Context> 

當我瀏覽我的LDAP,每個用戶擁有成員「成員」在GROUPE,我在如何定義的組來定義rolebase /搜索/樹/名稱進入ldap。 登錄到我的webapp誰在LDAP以下屬性:

memberOf   CN=TOTOAdmins,OU=ABC,DC=ABCDEF,DC=xyz 

(他爲四組型動物羣的甚至成員,但我不知道這是否是相關的)

我不知道這是否會幫助,但在主頁上我有

<h1><% =request.getUserPrincipal()%></h1> 

,當我登錄與用戶:TOTO,它打印:

GenericPrincipal [CN = OU = ABC,DC = ABCDEF,DC = xyz,CN = TOTOAdmins,OU = ABC,DC = ABCDEF,DC = xyz,CN =讀取器,CN = ABC,DC = ABCDEF ,DC = xyz,CN = Users,CN =角色,DC = ABCDEF,DC = xyz)

嗯,你真是我最後的機會。

+0

有什麼問題嗎? – EJP 2012-03-18 21:01:59

回答

0

嘗試改變屬性roleSearch

"(member={0})" 

"(memberOf={0})"