portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject svn commit: r483771 [5/5] - in /portals/jetspeed-2/trunk/components/security: etc/ src/java/org/apache/jetspeed/security/spi/impl/ src/java/org/apache/jetspeed/security/spi/impl/ldap/ src/test/JETSPEED-INF/directory/config/apacheds/ src/test/JETSPEED-I...
Date Fri, 08 Dec 2006 01:47:33 GMT
Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserGroupMembershipAttributes2.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserIdAttribute.png
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserIdAttribute.png?view=auto&rev=483771
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserIdAttribute.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserObjectClasses.png
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserObjectClasses.png?view=auto&rev=483771
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserObjectClasses.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserRoleMembershipAttributes1.png
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserRoleMembershipAttributes1.png?view=auto&rev=483771
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserRoleMembershipAttributes1.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserRoleMembershipAttributes2.png
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserRoleMembershipAttributes2.png?view=auto&rev=483771
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/UserRoleMembershipAttributes2.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/rootPassword.png
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/rootPassword.png?view=auto&rev=483771
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/rootPassword.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/userUidAttribute.png
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/userUidAttribute.png?view=auto&rev=483771
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/components/security/xdocs/images/ldap/userUidAttribute.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: portals/jetspeed-2/trunk/components/security/xdocs/ldap.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/xdocs/ldap.xml?view=diff&rev=483771&r1=483770&r2=483771
==============================================================================
--- portals/jetspeed-2/trunk/components/security/xdocs/ldap.xml (original)
+++ portals/jetspeed-2/trunk/components/security/xdocs/ldap.xml Thu Dec  7 17:47:28 2006
@@ -1,164 +1,1022 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Jetspeed 2 Security Services Configuration</title>
-        <authors>
-            <person name="David Le Strat" email="dlestrat@apache.org" />
-            <person name="Ate Douma" email="ate@douma.nu" />
-        </authors>
-    </properties>
-    <body>
-
-        <section name="LDAP Configuration">
-            <p>
-                Jetspeed 2 provides an embedded LDAP configuration through the <a
-                href="http://directory.apache.org/subprojects/apacheds/index.html">Apache Directory Server</a>
-                . A external LDAP directory can also be onfigured in order to leverage the LDAP security functionality.
-            </p>
-            <subsection name="Configuring Jetspeed 2 to Use LDAP">
-            <p>
-            The following two files provide assembly configuration for authenticating with LDAP:
-            <ul>
-                <li><i><a 
-                href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/security/etc/security-spi-ldap.xml?view=markup">security-spi-ldap.xml</a>:</i> Provides
-                the configuration information for LDAP binding.  See configuration details below.</li>
-                <li><i><a 
-                href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/security/etc/security-spi-ldap-atn.xml?view=markup">security-spi-ldap-atn.xml</a>:</i> Provides
-                the SPI configuration for authentication.  It replaces the default implementations of <i>CredentialHandler</i> and <i>UserSecurityHandler</i> 
-                with an LDAP specific implementation.</li>
-            </ul>
-            </p>
-            <p>
-            In order to configure Jetspeed 2 to use LDAP, add <i>security-spi-ldap.xml</i> and <i>security-spi-ldap-atn.xml</i> to the Jetspeed 2 application
-            assembly directory and remove the default authentication SPI file <i>security-spi-atn.xml</i>.
-            In the source, this directory is located at:
-            <source>${jetspeed-source-home}/src/webapp/WEB-INF/assembly/</source>
-            If your application is deployed in Tomcat, this directory is located at:
-            <source>${tomcat-home}/webapps/jetspeed/WEB-INF/assembly</source> 
-            </p>
-            <p>
-            The <i>security-spi-ldap.xml</i> configuration file requires the following values to be set:
-            </p>
-            <table>
-                <tr>
-                    <th>Property</th>
-                    <th>Value</th>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.initialContextFactory</td>
-                    <td>
-                    The initial context factory used for binding to LDAP.  The LDAP assembly is configured
-                    by default with the Sun LDAP context factory: <i>com.sun.jndi.ldap.LdapCtxFactory</i>.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.ldapServerName</td>
-                    <td>
-                    The location of the LDAP server to connect to.  By default the LDAP assembly uses
-                    <i>localhost</i>.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.ldapServerPort</td>
-                    <td>
-                    The port of the LDAP server to connect to.  By default the LDAP assembly uses
-                    Apache Directory Server default port <i>10389</i>.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.rootDn</td>
-                    <td>
-                    The user distinguished name used by the application to connect to the LDAP server.
-                    By default the LDAP assembly uses Apache Directory Server system admin user <i>uid=admin,ou=system</i>.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.rootPassword</td>
-                    <td>
-                    The password used by the application to connect to the LDAP server.
-                    By default the LDAP assembly uses Apache Directory Server system admin password <i>secret</i>.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.rootContext</td>
-                    <td>
-                    The root context for the LDAP directory set up.  By default, Jetspeed 2 uses the same root context
-                    as the root context provided in the <a href="http://docs.safehaus.org/display/APACHEDS/The+Apache+Directory+Tutorial">Apache Directory Server tutorial</a>:
-                    <i>o=sevenSeas</i>.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.defaultDnSuffix</td>
-                    <td>
-                    Provides the ability to add a suffix to the principal.  This is empty by default.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.ou.users</td>
-                    <td>
-                    The default organizational unit for users.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.jetspeed.ldap.ou.groups</td>
-                    <td>
-                    The default organizational unit for groups.
-                    </td>
-                </tr>
-            </table>
-            </subsection>
-            <subsection name="Starting LDAP">
-            <p>
-            Jetspeed 2 maven plugin provides a easy way to get started with Apache Directory Server. To start the LDAP
-            server run:
-            <pre>maven j2:start.ldap.server</pre>
-            See <a href="../../j2-maven-plugin.html#LDAP_Management_Goals">the J2 maven plugin documentation</a> for more information.
-            </p>
-            </subsection>
-            <subsection name="Connecting to LDAP">
-            <p>
-            Many client are available for connecting to LDAP.  The Apache Directory Server provides 
-            <a href="http://docs.safehaus.org/display/APACHEDS/Connecting+to+Apache+Directory+Server">a nice tutorial</a> on how
-            to connect to Apache DS with different clients.
-            </p>
-            <p>
-            If you decide to use <a href="http://www.jxplorer.org/">JXplorer</a>, your client connection window should look
-            as follow:<br/>
-            <div align="center"><img src="images/ldap-client-connection.gif" border="0"/></div>
-            </p>
-            </subsection>
-            <subsection name="Loading Test User Accounts">
-            <p>
-            Jetspeed 2 provides 
-            <a href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/etc/apacheds/j2-apacheds.ldif?view=markup">a sample ldiff file</a> 
-            for loading user test data. Import the ldif into your LDAP.  In JXplorer, users can select <i>LDIF -> Import File</i> and choose the
-            file to import. 
-            </p>
-            <p>
-            Once the data is imported and all above steps have been performed, start or restart your application server.
-            You can now login to Jetspeed with the accounts available in LDAP. For instance <i>admin/admin</i>.
-            </p>
-            <p>
-            The LDAP configuration also fully integrates with Jetspeed <i>UserManager</i>, and therefore admin functionality
-            such as the user management section, retrieve user from LDAP as well as shown below:<br/>
-            <div align="center"><img src="images/j2-admin-user-mgt.gif" border="0"/></div>
-            </p>
-            </subsection>
-        </section>
-    </body>
-</document>
\ No newline at end of file
+<?xml version="1.0"?>
+<!--
+  Copyright 2004 The Apache Software Foundation
+  
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<document>
+  <properties>
+    <title>Jetspeed 2 Security Services LDAP Configuration</title>
+    <authors>
+        <person name="Davy de Waele" />
+        <person name="David Le Strat" email="dlestrat@apache.org" />
+        <person name="Ate Douma" email="ate@douma.nu" />
+    </authors>
+  </properties>
+  <body>
+
+      <section name="LDAP Configuration">
+      <p>
+        This document attempts to document the configuration of the LDAP security module in Jetspeed. Out of the box,
+        Jetspeed searches for user, group &amp; role information in a relational database. However, it can also search
+        this information in an LDAP directory.
+      </p>
+      <p>
+        Jetspeed stores its LDAP configuration in a Spring XML file called
+           <a href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/security/etc/security-spi-ldap.xml?content-type=text/plain&amp;view=co">
+                  security-spi-ldap.xml
+           </a>
+      </p>
+      <p> 
+        This XML file describes an object (used internally by Jetspeed) that contains LDAP configuration parameters.
+        These configuration parameters are passed onto the object through constructor arguments:
+      </p>
+      <p>
+        <source><![CDATA[
+<!-- The LDAP initial context factory. -->
+<constructor-arg index="0">
+  <value>com.sun.jndi.ldap.LdapCtxFactory</value>
+</constructor-arg>]]></source>
+      </p>
+      <p>
+        Each constructor argument contains an index to specify the correct order. The file defines the following arguments:
+        <table>
+          <tr>
+            <th>Index</th><th>Name</th><th>Example</th>
+          </tr>
+          <tr>
+            <td>0</td><td>Initial context factory</td><td>com.sun.jndi.ldap.LdapCtxFactory</td>
+          </tr>
+          <tr>
+            <td>1</td><td>LDAP server host</td><td>localhost</td>
+          </tr>
+          <tr>
+            <td>2</td><td>LDAP server port</td><td>389</td>
+          </tr>
+          <tr>
+            <td>3</td><td>Root context</td><td>o=sevenSeas</td>
+          </tr>
+          <tr>
+            <td>4</td><td>The LDAP server root dn</td><td>uid=admin,o=sevenSeas</td>
+          </tr>
+          <tr>
+            <td>5</td><td>The LDAP server root password</td><td>secret</td>
+          </tr>
+          <tr>
+            <td>6</td><td>The roles filter</td><td>(objectclass=groupOfUniqueNames))</td>
+          </tr>
+          <tr>
+            <td>7</td><td>The groups filter</td><td>(objectClass=groupOfNames)</td>
+          </tr>
+          <tr>
+            <td>8</td><td>The user filter</td><td>(objectclass=inetorgperson)</td>
+          </tr>
+          <tr>
+            <td>9</td><td>roleMembershipAttributes</td><td>uniqueMember</td>
+          </tr>
+          <tr>
+            <td>10</td><td>userRoleMembershipAttributes</td><td></td>
+          </tr>
+          <tr>
+            <td>11</td><td>groupMembershipAttributes</td><td>member</td>
+          </tr>
+          <tr>
+            <td>12</td><td>userGroupMembershipAttributes</td><td></td>
+          </tr>
+          <tr>
+            <td>13</td><td>groupMembershipForRoleAttributes</td><td>uniqueMember</td>
+          </tr>
+          <tr>
+            <td>14</td><td>roleGroupMembershipForRoleAttributes</td><td></td>
+          </tr>
+          <tr>
+            <td>15</td><td>defaultSearchBase</td><td></td>
+          </tr>
+          <tr>
+            <td>16</td><td>roleFilterBase</td><td>ou=Roles,ou=OrgUnit1</td>
+          </tr>
+          <tr>
+            <td>17</td><td>groupFilterBase</td><td>ou=Groups,ou=OrgUnit1</td>
+          </tr>
+          <tr>
+            <td>18</td><td>userFilterBase</td><td>ou=People,ou=OrgUnit1</td>
+          </tr>
+          <tr>
+            <td>19</td><td>roleObjectClasses</td><td>top,groupOfUniqueNames</td>
+          </tr>
+          <tr>
+            <td>20</td><td>groupObjectClasses</td><td>top,groupOfNames</td>
+          </tr>
+          <tr>
+            <td>21</td><td>userObjectClasses</td><td>top,person,organizationalPerson,inetorgperson</td>
+          </tr>
+          <tr>
+            <td>22</td><td>roleIdAttribute</td><td>cn</td>
+          </tr>
+          <tr>
+            <td>23</td><td>groupIdAttribute</td><td>cn</td>
+          </tr>
+          <tr>
+            <td>24</td><td>userIdAttribute</td><td>uid</td>
+          </tr>
+          <tr>
+            <td>25</td><td>UidAttribute</td><td>uid</td>
+          </tr>
+          <tr>
+            <td>26</td><td>MemberShipSearchScope</td><td>1</td>
+          </tr>
+          <tr>
+            <td>27</td><td>roleUidAttribute</td><td>cn</td>
+          </tr>
+          <tr>
+            <td>28</td><td>groupUidAttribute</td><td>cn</td>
+          </tr>
+          <tr>
+            <td>29</td><td>userUidAttribute</td><td>uid</td>
+          </tr>
+          <tr>
+            <td>30</td><td>roleObjectRequiredAttributeClasses</td><td>uniqueMember</td>
+          </tr>
+          <tr>
+            <td>31</td><td>groupObjectRequiredAttributeClasses</td><td>member</td>
+          </tr>
+          <tr>
+            <td>32</td><td>userAttributes</td><td>sn={u},cn={u}</td>
+          </tr>
+          <tr>
+            <td>33</td><td>roleAttributes</td><td>sn={u}</td>
+          </tr>
+          <tr>
+            <td>34</td><td>groupAttributes</td><td>sn={u}</td>
+          </tr>
+          <tr>
+            <td>35</td><td>userPasswordAttribute</td><td>passWord</td>
+          </tr>
+          <tr>
+            <td>36</td><td>knownAttributes</td><td>cn,sn,o,uid,ou,objectClass,userPassword,member,uniqueMember,memberOf</td>
+          </tr>
+        </table>
+      </p>
+    </section>
+    <section name="Configuring Jetspeed 2 to Use LDAP">
+        <p>
+          Configuring jetspeed for LDAP usage is simply a matter of having the proper configuration files in place.
+          These configuration files are to be placed in the <code>WEB-INF/assembly</code> folder of the expanded jetspeed WAR.
+        </p>
+        <p>
+          The following files need to be copied into that directory if you want to connect Jetspeed2 to an LDAP server.
+          <ul>
+            <li>
+              <i>
+                <a
+                  href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/security/etc/security-spi-ldap.xml?content-type=text/plain&amp;view=co">
+                  security-spi-ldap.xml
+                </a>
+                :
+              </i>
+              Provides the configuration information for LDAP binding, explained in detail below.
+            </li>
+            <li>
+              <i>
+                <a
+                  href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/security/etc/security-spi-ldap-atn.xml?content-type=text/plain&amp;view=co">
+                  security-spi-ldap-atn.xml
+                </a>
+                :
+              </i>
+              Provides the SPI configuration for authentication. It replaces the default implementations of the
+              <i>CredentialHandler</i> and <i>UserSecurityHandler</i> with an LDAP specific implementation.
+            </li>
+            <li>
+              <i>
+                <a
+                  href="http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/security/etc/security-spi-ldap-atz.xml?content-type=text/plain&amp;view=co">
+                  security-spi-atz.xml
+                </a>
+                :
+              </i>
+              Provides the SPI configuration for authorization. It replaces the default implementations of the
+              <i>RoleSecurityHandler</i>, <i>GroupSecurityHandler</i> and <i>SecurityMappingHandler</i>
+              with an LDAP specific implementation.
+            </li>
+          </ul>
+        </p>
+        <p>
+          The default authentication and authorization SPI configurations (the files called <b><code>security-spi-atn.xml</code></b> and <b><code>security-spi-atz.xml</code></b>)
+          need to be removed from that assembly directory.
+        </p>
+        <p>
+          In the Jetspeed source tree the examples ldap configuration files can be found in:
+            <source><![CDATA[${jetspeed-source-home}/components/security/etc/]]></source>
+        </p>
+        <p>
+          If your application is deployed in Tomcat, the target assembly directory is located at:
+           <source><![CDATA[${tomcat-home}/webapps/jetspeed/WEB-INF/assembly/]]></source>
+        </p>
+        <p>
+          Furthermore, the source tree of the Jetspeed security component provides several tests using different configurations as well as ldiff sample data for testing the ApacheDS,
+          OpenLDAP, Domino and sunDS LDAP servers. These are located at:
+           <source><![CDATA[${jetspeed-source-home}/components/security/src/test/JETSPEED-INF/directory/config/]]></source>
+        </p>   
+        <p>
+          We’ll discuss the security-spi-ldap.xml file in detail below.
+        </p>
+        
+      <subsection name="LDAP Connection properties">
+        <p>One of the first Jetspeed needs to know is how it to connect to the directory store.</p>
+        <p>
+          This is done by providing the following properties:
+        </p>
+
+       <br/>
+        <p><b><code>initialContextFactory</code></b></p>
+        <p>
+           The initial context factory
+           <source><![CDATA[
+<constructor-arg index="0">
+  <value>com.sun.jndi.ldap.LdapCtxFactory</value>
+</constructor-arg>]]></source>
+        </p>
+
+       <br/>
+        <p><b><code>ldapServerName</code></b></p>
+        <p>
+          The name of the LDAP server
+          <source><![CDATA[
+<constructor-arg index="1">
+  <value>localhost</value>
+</constructor-arg>]]></source>
+        </p>
+
+       <br/>
+        <p><b><code>ldapServerPort</code></b></p>
+        <p>
+          The port of the LDAP server
+          <source><![CDATA[
+<constructor-arg index="2">
+  <value>389</value>
+</constructor-arg>]]></source>
+        </p>
+                
+       <br/>
+        <p><b><code>rootContext</code></b></p>
+        <p>
+          The root context of the LDAP server
+          <source><![CDATA[
+<constructor-arg index="3">
+  <value>o=sevenSeas</value>
+</constructor-arg>]]></source>
+        </p>
+                
+       <br/>
+        <p><b><code>rootDn</code></b></p>
+        <p>
+          The username
+          <source><![CDATA[
+<constructor-arg index="4">
+  <value>uid=admin,ou=system</value>
+</constructor-arg>]]></source>
+        </p>
+                
+       <br/>
+        <p><b><code>rootPassword</code></b></p>
+        <p>
+          The password
+          <source><![CDATA[
+<constructor-arg index="5">
+  <value>secret</value>
+</constructor-arg>]]></source>
+        </p>
+        
+        <p>Validate the connection using an LDAP browser:</p>
+        <p align="center"><img src="images/ldap/rootPassword.png" border="0"/></p>        
+        <br/>        
+      </subsection>
+      <subsection name="LDAP Object Filters">
+        <p>
+          A directory service can store any type of object anywhere. As Jetspeed needs to work with roles,
+          groups and users that are defined within the directory, it needs some help in finding them.</p>
+        <p>The following 3 properties define how Jetspeed will lookup Roles, Groups and Users from the directory store.</p>
+        <ul>
+          <li>RoleFilter</li>
+          <li>GroupFilter</li>
+          <li>UserFilter</li>
+        </ul>
+        <p>Property values must be valid objectClassses that are defined in the LDAP schema.</p>
+        <p>Most LDAP vendors usually expose their schema through an LDIF file that defines every attribute and objectclass available in the directory store.</p>
+        <p>A configuration based on Lotus Domino might look like this
+          <source><![CDATA[
+RoleFilter=(&(objectclass=groupOfUniqueNames)(!(objectClass=dominoGroup)))
+GroupFilter=(objectclass=dominoGroup)
+UserFilter=(objectclass=dominoPerson)]]></source>
+        </p>
+        <p>
+           Domino uses the <b>dominoGroup</b> objectClass to define a group, <b>dominoPerson</b> to define a user, and <b>groupOfUniqueNames</b> to define a role.
+           Since group also has the groupOfUniqueNames as an object class, we need to define a filter for the roles, so that it will only pick up roles.
+           If we had defined the RoleFilter as being (objectclass=groupOfUniqueNames), then the filter would have also picked up the groups.
+         </p>        
+         
+       <br/>
+        <p><b><code>RoleFilter</code></b></p>
+        <p>
+          This property tells Jetspeed that roles can be recognized by looking for an <b>objectClass</b> attribute with value <b>groupOfUniqueNames</b>.
+          <source><![CDATA[
+<constructor-arg index="6">
+  <value>=(objectclass=groupOfUniqueNames)</value>
+</constructor-arg>]]></source>
+        </p>
+        
+       <br/>
+        <p><b><code>GroupFilter</code></b></p>
+        <p>
+          This property tells Jetspeed that groups can be recognized by looking for an <b>objectClass</b> attribute with value <b>groupOfNames</b>.
+          <source><![CDATA[
+<constructor-arg index="7">
+  <value>=(objectclass=groupOfUniqueNames)</value>
+</constructor-arg>]]></source>
+        </p>
+        
+       <br/>
+        <p><b><code>UserFilter</code></b></p>
+        <p>
+          This property tells Jetspeed that users can be recognized by looking for an <b>objectClass</b> attribute with value <b>organizationalPerson</b>.
+          <source><![CDATA[
+<constructor-arg index="8">
+  <value>=(objectclass= organizationalPerson)</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+          Alongside these filters, we can also define a filter base for each of those objects (roles, groups and users).
+        </p>
+        
+      </subsection>
+      
+      <subsection name="Group/Role membership">
+        <p>In LDAP there are basically 2 ways to define group &amp; role membership (the fact that a user belongs to a group or a role):</p>
+        <ul>
+          <li>The user object has an attribute that specifies the groups he is a member of. This is usually done through a memberOf attribute.
+                Microsoft Active Directory and Sun Directory Server use the memberOf and nsrole attribute on the user object.
+          </li>
+          <li>
+            The group/role object contains the group membership information via a multi-valued attribute.
+            No attributes are put on the user to specify membership.
+            Each group/role object has a member list that contains the users belonging to the group
+          </li>
+        </ul>
+        <p>Jetspeed supports both models.</p>
+        <p>The primary tasks concerning membership of an LDAP are</p>
+        <ul>
+          <li>Determining if a user is part of a particular group/role</li>
+          <li>Obtain a list of users belonging to a particular group/role</li>
+        </ul>
+        <p>The 2 models we just covered have an impact on how these tasks are performed</p>
+        <ul>
+          <li>Attributes on user object
+            <ul>
+               <li>Determining if a user is part of a particular group/role:
+                 <ul><li>lookup the membership attribute (ex: memberOf) on the user object for a particular group/role</li></ul>
+               </li>
+               <li>Obtain a list of users belonging to a particular group/role:
+                 <ul><li>iterate over the all users, and check their memberOf attribute values for the group</li></ul>
+               </li>
+             </ul>
+           </li>
+           <li>Attributes on group/role object
+             <ul>
+               <li>To determine if a user is part of a particular group:
+                 <ul><li>search the member list on the group for the user</li></ul>
+               </li>
+               <li>To determine the users belonging to a particular group:
+                 <ul><li>iterate over the member list on the group</li></ul>
+               </li>
+             </ul>
+           </li>
+         </ul>
+         <p>We’ll now discuss in detail how group/role membership can be configured.</p>
+
+      </subsection>
+
+      <subsection name="Role membership">
+
+        <p>As already discussed, Jetspeed supports 2 models when it comes to Role membership:</p>
+        <ol>
+          <li>Putting the attributes on the user</li>
+          <li>Putting the attributes on the role</li>
+        </ol>
+        <p>Jetspeed requires that 1 of 2 properties is set with a value to determine the model:</p>
+        <ul>
+          <li>RoleMembershipAttributes</li>
+          <li>UserRoleMembershipAttributes</li>
+        </ul>
+
+       <br/>
+        <p><b><code>RoleMembershipAttributes</code></b></p>
+        <p>
+          In order to store role membership on the role, we’ll set the <b>RoleMembershipAttributes</b> attribute by specifying
+          the attribute on the role object that contains the membership information. 
+          We don’t provide a value for the <b>UserRoleMembershipAttributes</b> property.
+          <source><![CDATA[
+<constructor-arg index="9">
+  <value>member</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+           This will make sure that the member attribute is set on the role object, as can be seen in the following screenshot.
+           In the next example, the RoleMembershipAttribute will be blank, so the attributes will be on the user level.
+        </p>
+        <p>
+          In the screenshot below, we have a Role object defined by<br/>
+          <b>cn=Role3,ou=Roles,ou=OrgUnit1,o=sevenSeas</b>
+         </p>
+         <p>The role contains a member attribute, listing all users belonging to that role.</p>
+         <p align="center">
+           <img src="images/ldap/RoleMembershipAttributes1.png" border="0"/><br/>
+           <i>A role with 2 members</i>
+         </p>
+         <br/>
+         <p>
+           The value of the member attribute is the fully qualified DN of the user (including the root context). As you can see, the user doesn't contain any attributes with regards to role membership.
+         </p>
+         <p align="center">
+           <img src="images/ldap/RoleMembershipAttributes2.png" border="0"/><br/>
+           <i>A user</i>
+         </p>
+         <br/>
+         <p>
+           When this attribute is set, Jetspeed will determine the roles for a particular user by performing the following query:
+          <source><![CDATA[(&(member=cn=user1,ou=people,ou=orgunit1,o=sevenSeas)(objectclass=groupOfNames))]]></source>
+        </p>
+         <p>
+           This search filter will return any number of Roles in the directory.
+           The next step for Jetspeed is to identifiy these roles internally. In order to uniquely identify a role, it will use the RoleIdAttribute.
+         </p>
+         <p>
+           In the example above, cn=Role1 would have been amongst the searchresult. Jetspeed will use the RoleIdAttribute to pickup the role name.
+         </p>
+         
+       <br/>
+        <p><b><code>UserRoleMembershipAttributes</code></b></p>
+        <p>
+           In order to store role membership on the user, we’ll set the <b>UserRoleMembershipAttributes</b> attribute by specifying the attribute on the user object
+           that contains the membership information. We don’t provide a value for the <b>RoleMembershipAttributes</b> property.
+          <source><![CDATA[
+<constructor-arg index="10">
+  <value>memberOf</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+          This will make sure that for each role the user belongs to, the memberOf attribute is set on the user object, as can be seen in the following screenshot:
+        </p>
+         <p align="center">
+           <img src="images/ldap/UserRoleMembershipAttributes1.png" border="0"/><br/>
+           <i>User belonging to 4 different roles</i>
+         </p>
+         <br/>
+         <p>
+           The value of the <b>memberOf</b> attribute is the fully qualified DN of the role (including the root context).
+           It is a multi valued attribute, so a user can have zero or more <b>memberOf</b> attribute values.
+         </p>
+         <p>
+           As you can see, the user belongs to a role defined by<br/>
+           <b>cn=role1,ou=Roles,OrgUnit1,o=sevenSeas</b>.
+         </p>
+         <p>In order to resolve role membership, Jetspeed will search the directory for roles by using the following filter:
+          <source><![CDATA[
+# define the filters needed to search for roles/groups/users
+RoleFilter=(objectclass=groupOfUniqueNames)]]></source>
+         </p>
+         <p>As you can see in the screenshot, cn=role1,o=sevenSeas corresponds to an object representing a role.</p>
+         <p>
+           Notice the empty uniqueMember attribute. Most LDAP schemas force you to have a <b>uniqueMember</b> attribute on a <b>groupOfUniqueNames</b> object. 
+           Since Jetspeed needs to be able to create roles (that are empty upon creation), an empty <b>uniqueMember</b> attribute needs to be set.
+          This is configurable by Jetspeed through the <b>RequiredAttributeClasses</b> property.
+         </p>         
+         <p align="center">
+           <img src="images/ldap/UserRoleMembershipAttributes2.png" border="0"/><br/>
+           <i>A role without any members</i>
+         </p>
+         <br/>
+      </subsection>
+      
+      <subsection name="Group membership">
+      
+        <p>As already discussed, Jetspeed supports 2 models when it comes to Group membership:</p>
+        <ol>
+          <li>Putting the attributes on the user</li>
+          <li>Putting the attributes on the group</li>
+        </ol>
+        <p>Jetspeed requires that 1 of 2 properties is set with a value to determine the model:</p>
+        <ul>
+          <li>GroupMembershipAttributes</li>
+          <li>UserGroupMembershipAttributes</li>
+        </ul>
+
+       <br/>
+        <p><b><code>GroupMembershipAttributes</code></b></p>
+        <p>
+           In order to store group membership on the group, we'll set the <b>GroupMembershipAttributes</b> attribute by specifying the attribute on the group object
+           that contains the membership information. We don’t provide a value for the <b>UserGroupMembershipAttributes</b> property.
+          <source><![CDATA[
+<constructor-arg index="11">
+  <value>uniqueMember</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+          This will make sure that the <b>uniqueMember</b> attribute is set on the group object, as can be seen in the following screenshot.
+          In the previous example, the <b>GroupMembershipAttributes</b> was blank, so instead the <b>UserGroupMembershipAttributes</b> was used on the user level:
+        </p>
+         <p align="center">
+           <img src="images/ldap/GroupMembershipAttributes1.png" border="0"/><br/>
+         </p>
+         <br/>
+         <p>
+           The value of the uniquemember attribute is the fully qualified DN of the user (including the root context).
+           As you can see, the user doesn’t contain any attributes with regards to group membership.
+         </p>
+         <p align="center">
+           <img src="images/ldap/GroupMembershipAttributes2.png" border="0"/><br/>
+         </p>
+         
+       <br/>
+        <p><b><code>UserGroupMembershipAttributes</code></b></p>
+        <p>
+          In order to store group membership on the user, we’ll set the <b>UserGroupMembershipAttributes</b> attribute by specifying the attribute on the user object
+          that contains the membership information. We don’t provide a value for the <b>GroupMembershipAttributes</b> property.
+          <source><![CDATA[
+<constructor-arg index="12">
+  <value>memberOf</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+          This will make sure that the <b>memberOf</b> attribute is set on the user object, as can be seen in the following screenshot.
+        </p>
+        <p>
+          Only one of those parameters can be filled in. If the <b>GroupMemberShipAttributes</b> is set, Jetspeed assumes that the attribute to determine group membership is on the group object.
+        </p>
+         <p align="center">
+           <img src="images/ldap/UserGroupMembershipAttributes1.png" border="0"/><br/>
+           <i>User belonging to 2 different roles</i>
+         </p>
+         <br/>
+         <p>
+           The value of the memberOf attribute is the fully qualified DN of the role (including the root context). It is a multi valued attribute, so a user can have zero or more memberOf attribute values.
+           In the screenshot above, we can see that user1 belongs to 2 roles.
+         </p>
+         <p>
+           As you can see, the role is defined in <b>cn=role1,o=sevenSeas</b>. (notice the empty uniqueMember attribute).
+         </p>
+         <p align="center">
+           <img src="images/ldap/UserGroupMembershipAttributes2.png" border="0"/><br/>
+           <i>Role definition</i>
+         </p>
+         <br/>
+      </subsection>
+      
+      <subsection name="Group membership (roles)">
+      
+        <p>Besides storing users in a group, Jetspeed also supports storing roles into groups.</p>
+        <p>Again, just like with the basic group membership for users, Jetspeed supports 2 models when it comes to Group membership for roles:</p>
+        <ol>
+          <li>Putting the attributes on the role</li>
+          <li>Putting the attributes on the group</li>
+        </ol>
+        <p>Jetspeed requires that 1 of 2 properties is set with a value to determine the model:</p>
+        <ul>
+          <li>GroupMembershipForRoleAttributes</li>
+          <li>RoleGroupMembershipForRoleAttributes</li>
+        </ul>
+
+       <br/>
+        <p><b><code>GroupMembershipForRoleAttributes</code></b></p>
+        <p>
+           In order to store group membership on the group, we’ll set the GroupMembershipAttributes attribute by specifying the attribute on the group object
+           that contains the membership information. We don’t provide a value for the UserGroupMembershipAttributes property.
+          <source><![CDATA[
+<constructor-arg index="13">
+  <value>uniqueMember</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+          This will make sure that the uniqueMember attribute is set on the group object, as can be seen in the following screenshot.
+          In the previous example, the GroupMembershipAttributes was blank, so instead the UserGroupMembershipAttributes was used on the user level.
+        </p>
+         <p align="center">
+           <img src="images/ldap/GroupMembershipForRoleAttributes1.png" border="0"/><br/>
+         </p>
+         <br/>
+         <p>
+           The value of the uniquemember attribute is the fully qualified DN of the user (including the root context).
+           As you can see, the user doesn’t contain any attributes with regards to group membership.
+        </p>
+         <p align="center">
+           <img src="images/ldap/GroupMembershipForRoleAttributes2.png" border="0"/><br/>
+         </p>
+
+       <br/>
+        <p><b><code>RoleGroupMembershipForRoleAttributes</code></b></p>
+        <p>
+           In order to store group membership on the user, we’ll set the <b>UserGroupMembershipAttributes</b> attribute by specifying the attribute on the user object
+           that contains the membership information. We don’t provide a value for the <b>GroupMembershipAttributes</b> property.
+          <source><![CDATA[
+<constructor-arg index="14">
+  <value>memberOf</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>
+          This will make sure that the <b>memberOf</b> attribute is set on the user object, as can be seen in the following screenshot.
+        </p>
+         <p align="center">
+           <img src="images/ldap/GroupMembershipForRoleAttributes1.png" border="0"/><br/>
+         </p>
+         <br/>
+         <p>
+           The value of the uniquemember attribute is the fully qualified DN of the user (including the root context).
+           As you can see, the user doesn’t contain any attributes with regards to group membership.
+        </p>
+         <p align="center">
+           <img src="images/ldap/GroupMembershipForRoleAttributes2.png" border="0"/><br/>
+         </p>
+         <br/>
+         <p>
+           Only one of those parameters can be filled in. If the <b>GroupMemberShipAttributes</b> is set, Jetspeed assumes that the attribute to determine group membership is on the group object.
+         </p>
+         <p align="center">
+           <img src="images/ldap/RoleGroupMembershipForRoleAttributes1.png" border="0"/><br/>
+           <i>User belonging to 2 different roles</i>
+         </p>
+         <br/>
+         <p>
+           The value of the memberOf attribute is the fully qualified DN of the role (including the root context). It is a multi valued attribute, so a user can have zero or more memberOf attribute values.
+           In the screenshot above, we can see that user1 belongs to 2 roles.
+         </p>
+         <p>As you can see, the role is defined in <b>cn=role1,o=sevenSeas</b>. (notice the empty uniqueMember attribute).</p>
+         <p align="center">
+           <img src="images/ldap/RoleGroupMembershipForRoleAttributes2.png" border="0"/><br/>
+           <i>Role definition</i>
+         </p>
+         <br/>
+      </subsection>
+      
+      <subsection name="DefaultSearchBase">
+      
+        <p>Jetspeed allows you to define a default search base that will be used to search the directory
+          <source><![CDATA[
+<constructor-arg index="15">
+  <value></value>
+</constructor-arg>]]></source>
+        </p>
+      </subsection>
+      
+      <subsection name="LDAP Object Filter base">
+      
+        <p>Jetspeed allows you to define the search base that will be applied to queries for roles, groups and users.</p>
+        <p>Roles, groups and user are typically stored in well-defined containers within the LDAP structure.</p>
+        <ul>
+          <li>Roles can be stored in ou=Roles,ou=OrgUnit1</li>
+          <li>Groups can be stored in ou=Groups,ou=OrgUnit1</li>
+          <li>Users can be stored in ou=People,ou=OrgUnit1</li>
+        </ul>
+      
+        <p>
+          This allows you to have the following structure in your LDAP schema. Notice how there are many organizational units within the o=sevenSeas schema.
+          Jetspeed will limit its search scope on the LDAP to the property values defined above. This means that only roles, groups and people within OrgUnit1 will be used by Jetspeed.
+        </p>
+        <p align="center">
+          <img src="images/ldap/ObjectFilterBase.png" border="0"/><br/>
+        </p>
+        <br/>
+        <p>So, together with the object filers (RoleFilter, GroupFilter, UserFilter), Jetspeed will be able to locate the roles, groups and users within the directory.</p>
+        <p>Using these properties, Jetspeed will also create roles, groups and users using the provided ObjectClasses.</p>
+        
+       <br/>
+        <p><b><code>RoleFilterBase</code></b></p>
+        <p>
+           Using the property value below, Jetspeed will search for roles in the ou=Roles,ou=OrgUnit subtree.
+          <source><![CDATA[
+<constructor-arg index="16">
+  <value>ou=Roles,ou=OrgUnit1</value>
+</constructor-arg>]]></source>
+        </p>
+        <p align="center">
+          <img src="images/ldap/RoleFilterBase.png" border="0"/><br/>
+        </p>
+
+       <br/>
+        <p><b><code>GroupFilterBase</code></b></p>
+        <p>
+           Using the property value above, Jetspeed will search for groups in the ou=Groups,ou=OrgUnit subtree.
+          <source><![CDATA[
+<constructor-arg index="17">
+  <value>ou=Groups,ou=OrgUnit1</value>
+</constructor-arg>]]></source>
+        </p>
+        <p align="center">
+          <img src="images/ldap/GroupFilterBase.png" border="0"/><br/>
+        </p>
+        
+       <br/>
+        <p><b><code>UserFilterBase</code></b></p>
+        <p>
+           Using the property value above, Jetspeed will search for users in the ou=People,ou=OrgUnit subtree.
+          <source><![CDATA[
+<constructor-arg index="18">
+  <value>ou=People,ou=OrgUnit1</value>
+</constructor-arg>]]></source>
+        </p>
+        <p align="center">
+          <img src="images/ldap/UserFilterBase.png" border="0"/><br/>
+        </p>
+        
+      </subsection>
+      
+      <subsection name="LDAP Object classes">
+
+        <p>Jetspeed allows you to define the ObjectClasses that are needed to create roles, groups and users through the following properties</p>
+        <ul>
+          <li>RoleObjectClasses</li>
+          <li>GroupObjectClasses</li>
+          <li>UserObjectClasses</li>
+        </ul>
+        <p>
+          Through the administrative interface, Jetspeed allows an administrator to create roles, groups and users.
+          Each directory server has its own way of defining a role, group or user.
+          Some of the LDAP vendors use proprietary ObjectClasses to define these objects (for example Domino LDAP server uses an dominoGroup objectClass to define a group).
+        </p>
+        <p>Using these properties, Jetspeed will create roles, groups and users using the provided ObjectClasses.</p>
+        
+       <br/>
+        <p><b><code>RoleObjectClasses</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="19">
+  <value>top,groupOfNames</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>Using the settings above, roles will be created like this</p>
+        <p align="center">
+          <img src="images/ldap/RoleObjectClasses.png" border="0"/><br/>
+        </p>
+        <p>Notice how all of the objectClasses defined by the RoleObjectClasses attribute have been created in the LDAP</p>
+        
+       <br/>
+        <p><b><code>GroupObjectClasses</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="20">
+  <value>top,groupOfUniqueNames</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>Using the settings above, groups will be created like this</p>
+        <p align="center">
+          <img src="images/ldap/GroupObjectClasses.png" border="0"/><br/>
+        </p>
+        <p>Notice how all of the objectClasses defined by the GroupObjectClasses attribute have been created in the LDAP</p>
+        
+       <br/>
+        <p><b><code>UserObjectClasses</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="21">
+  <value>top,groupOfUniqueNames</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>Using the settings above users will be created like this</p>
+        <p align="center">
+          <img src="images/ldap/UserObjectClasses.png" border="0"/><br/>
+        </p>
+        <p>Notice how all of the objectClasses defined by the UserObjectClasses attribute have been created in the LDAP</p>
+        
+      </subsection>
+      
+      <subsection name="Naming Attributes">
+      
+        <ul>
+          <li>RoleIdAttribute</li>
+          <li>GroupIdAttribute</li>
+          <li>UserIdAttribute</li>
+        </ul>
+        
+        <p>
+          The attributes above allow you to define the naming attribute for roles / groups and users.
+          When an object is created in the directory, a naming attribute needs to be specified.
+          The naming attribute is the attribute that uniquely defines the object within its subdirectory.
+        </p>
+        
+        <p>In the screenshot below, you can see that the admin user in OrgUnit1/People is defined by <b>cn=admin</b>.</p>
+        <p><b>cn</b> is the naming attribute for the user object, as no 2 admin users can exist in the OrgUnit1/People subdirectory</p>
+        
+        <p align="center">
+          <img src="images/ldap/IdAttributes.png" border="0"/><br/>
+        </p>
+        <br/>
+        
+        <p>By changing the property, you can control the way Jetspeed creates user objects.</p>
+        
+       <br/>
+        <p><b><code>RoleIdAttribute</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="22">
+  <value>cn</value>
+</constructor-arg>]]></source>
+        </p>
+
+       <br/>
+        <p><b><code>GroupIdAttribute</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="23">
+  <value>cn</value>
+</constructor-arg>]]></source>
+        </p>
+
+       <br/>
+        <p><b><code>UserIdAttribute</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="24">
+  <value>uid</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>In the screenshot below, users have the <b>uid</b> attribute as their naming attribute</p>
+        <p align="center">
+          <img src="images/ldap/UserIdAttribute.png" border="0"/><br/>
+        </p>
+        
+      </subsection>
+      
+      <subsection name="UserId Attribute">
+      
+        <p>
+          When Jetspeed attempts to find a user, it does so based on the userId provided by the user in the login screen.
+          This userId needs to be defined on the object through a specific attribute. Most LDAP servers have a uid attribute that defines the username of the user in the LDAP.
+        </p>
+        
+        <p>When Jetspeed builds a userPrincipal internally, it will use the attribute corresponding to the value of the userUidAttribute.</p>
+        <p align="center">
+          <img src="images/ldap/userUidAttribute.png" border="0"/><br/>
+        </p>
+
+       <br/>
+        <p><b><code>userUidAttribute</code></b></p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="25">
+  <value>cn</value>
+</constructor-arg>]]></source>
+        </p>
+        <p>This property is used in conjunction with the UidAttribute</p>
+        <p>
+          <source><![CDATA[
+UserIdAttribute=cn
+UidAttribute=uid]]></source>
+        </p>
+        
+      </subsection>
+      
+      <subsection name="membershipSearchScope">
+      
+        <p>Jetspeed allows you to customize the search scope when it comes to membership</p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="26">
+  <value>cn</value>
+</constructor-arg>]]></source>
+        </p>
+        
+      </subsection>
+      
+      <subsection name="RequiredAttributeClasses">
+        
+        <p>
+          Some ObjectClasses force you to add specific attributes on the object before storing it in the directory. 
+          Jetspeed allows you to specify these attributes for roles and groups through the following properties
+        </p>
+        <ul>
+          <li>roleObjectRequiredAttributeClasses</li>
+          <li>roleObjectRequiredAttributeClasses</li>
+        </ul>
+        <p>For example, most LDAP schemas force you to have a <b>uniqueMember</b> attribute on a <b>groupOfUniqueNames</b> object.</p>
+        <p>Since Jetspeed needs to be able to create empty roles through the administrative console, an empty <b>uniqueMember</b> attribute needs to be set upon role creation.</p>
+        <p>This is handled internally by Jetspeed and can be customized by setting the <b>groupObjectRequiredAttributeClasses</b> property.</p>
+      
+       <br/>
+        <p><b><code>roleObjectRequiredAttributeClasses</code></b></p>
+        <p>The following property specifies that if a role is created, an empty <b>member</b> attribute will be created on the role object in order to comply with the LDAP schema.</p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="30">
+  <value>member</value>
+</constructor-arg>]]></source>
+        </p>
+
+       <br/>
+        <p><b><code>groupObjectRequiredAttributeClasses</code></b></p>
+        <p>The following property specifies that if a group is created, an empty <b>uniqueMember</b> attribute will be created on the group object in order to comply with the LDAP schema.</p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="31">
+  <value>uniqueMember</value>
+</constructor-arg>]]></source>
+        </p>
+
+      </subsection>
+      
+      <subsection name="LDAP Object attributes">
+      
+        <p>
+          Jetspeed has an administrative console that allows an administrator to create groups, roles and users in the directory.
+          The Jetspeed LDAP configuration has 3 properties that can manipulate the creation of those objects
+        </p>
+        <ul>
+          <li>userAttributes</li>
+          <li>roleAttributes</li>
+          <li>groupAttributes</li>
+        </ul>
+        <p>Each property accepts a comma separated list of attributes. Placeholders can be used in the attribute value.</p>
+        
+       <br/>
+        <p><b><code>userAttributes</code></b></p>
+        <p>
+          For example, the following <b>userAttributes</b> value will make sure that when Jetspeed creates a user in the directory,
+          the <b>sn, cn and uid</b> attribute will be created containing the username of the user.
+        </p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="32">
+  <value>sn={u},cn={u}</value>
+</constructor-arg>]]></source>
+        </p>
+        
+       <br/>
+        <p><b><code>roleAttributes</code></b></p>
+        <p>
+          For example, the following <b>roleAttributes</b> value will make sure that when Jetspeed creates a user in the directory,
+          the <b>cn</b> attribute will be created containing the username of the user.
+        </p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="33">
+  <value>cn={u}</value>
+</constructor-arg>]]></source>
+        </p>
+        
+       <br/>
+        <p><b><code>groupAttributes</code></b></p>
+        <p>
+          For example, the following <b>groupAttributes</b> value will make sure that when Jetspeed creates a user in the directory,
+          the <b>cn</b> attribute will be created containing the username of the user.
+        </p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="34">
+  <value>cn={u}</value>
+</constructor-arg>]]></source>
+        </p>
+        
+      </subsection>
+      
+      <subsection name="LDAP Password attributes">
+      
+        <p>
+          During runtime, Jetspeed needs to read the password that is associated with a user.
+          Jetspeed needs to know the attribute on the user object that contains the password.
+          The <b>userPasswordAttribute</b> property defines the LDAP attribute that contains the password of the user
+        </p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="35">
+  <value>cn={u}</value>
+</constructor-arg>]]></source>
+        </p>
+        
+      </subsection>
+      
+      <subsection name="Known Attributes">
+      
+        <p>
+           When Jetspeed performs LDAP queries, we need to specify the set of attributes that we want to return.
+           This is done by specifying a comma separated value of LDAP attributes in the <b>knowAttributes</b> property
+        </p>
+        <p>
+          <source><![CDATA[
+<constructor-arg index="36">
+  <value>cn,sn,o,uid,ou,objectClass,userPassword,member,uniqueMember,memberOf</value>
+</constructor-arg>]]></source>
+        </p>
+        
+      </subsection>
+      
+    </section>
+  </body>
+</document>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org


Mime
View raw message