Novell is now a part of Micro Focus

How to Integrate NDS eDirectory with Your Web Application Using the eCommerce Beans for LDAP

Articles and Tips: article

J. Jeffrey Hanson
Senior Architect
Financial Fusion
jhanson583@aol.com

01 Jul 2001


Tis article discusses the use of LDAP Beans for eCommerce in leveraging NDS eDirectory within Web Applications.

The Need for LDAP

Directory services are designed to assist in locating organizations, people, and other entities such as servers, printers, databases, groups, applications, and so on. They link organizations and other entities together using a hierarchical tree structure, and they maintain logical order in a network that may interconnect many sites and may support thousands of users with multiple network objects and interconnections.

Many different directory services implementations exist with several different proprietary APIs used to access the directories they represent. Recently, the introduction of Lightweight Directory Access Protocol (LDAP) has evolved as a platform and directory independent mechanism for creating, managing, and accessing directory services servers. Developed at the University of Michigan at Ann Arbor, LDAP is a protocol for accessing and managing directory services. LDAP's basic structure is based on a simple information tree called a "directory information tree" (DIT). Each leaf in the tree is an entry; the first, or top-level entry, is the root entry. An entry includes a distinguished name (DN) and any number of attribute/value pairs. The DN, which is the name of an entry, must be unique. It represents the relationship between the entry and the rest of the DIT, similar to the way in which a file's full path name represents its relationship in a file system.

The LDAP protocol defines six standard operations that can be performed:

  • Binding/authenticating to the directory

  • Searching for entries in the directory

  • Reading attributes of entries in the directory

  • Adding entries to the directory

  • Modifying existing entries in the directory

  • Removing an entry from the directory

Other services defined by LDAP are referral (allowing directory servers to link to each other), replication, and encryption using SASL, SSL, user certificates, and Access Control Lists.

Separating Business Logic and Presentation Using MVC

Novell's LDAP Beans for eCommerce will be used to perform several kinds of directory services management duties, as shown in the Web application examples below. Web applications typically consist of an HTTP request passed from a Web browser to a Web server, or from a Web application server where some form of business logic or data access is performed. The response is formed as HTML and passed back to the Web browser. This interaction between the client and server can be abstracted using the model-view-controller (MVC) pattern. The request will be initially handled by a servlet residing within the Web application environment. This servlet acts as the controller of the Web application. The controller-servlet reacts to the request by retrieving data for the client and by executing business logic for the client. The controller-servlet then passes a response, in the form of HTML, back to the client.

Using one servlet to handle data access, perform business logic, form HTML responses, and so on, leads to an implementation that is not easily customized for different domains and/or client devices. To solve this problem, let the controller-servlet handle the incoming requests, but supply the controller-servlet with Java Beans that perform data access and business logic. As long as you carefully craft the interfaces that the Java Beans expose, the beans can be easily replaced with other beans that access different data sources or perform different business logic. This can all take place without re-installing the application or bringing down the server. The eCommerce beans used for data access and business logic are built using the "Command" pattern and will make up the model for this application.

The design can be taken even further towards shielding from customization problems and, at the same time, provide a clean mechanism for supporting multiple client devices. Do this by using Java Server Pages as the means to produce the user interface that is passed back to the client. Java Server Pages (JSP) are simply HTML pages with a few special tags introduced, which allow Java code to be embedded within the HTML. A JSP is compiled on the server, on its first invocation, into a Java servlet. The resulting servlet handles the duties of forming the response that is passed back to the client. An HTML author can customize the JSP at any point after its creation, and the server will then re-compile the JSP on its next invocation. Then the customization will be exposed to the client. This eliminates the need to re-compile any other part of the application and can be done while the server and application are running. Java Server Pages make up the view portion of the application.

Supported Platforms and Installation Requirements

Novell's eCommerce LDAP Beans are supported on the following platforms:

  • Java 2 Platform, Standard Edition, v1.2 or greater

  • NDS eDirectory version 8.0 or greater

  • iPlanet Directory Server version 4.1 or greater

The following libraries and packages are prerequisites in order to use Novell's eCommerce LDAP Beans:

  1. JNDI 1.2.1 Class Libraries and the LDAP 1.2.2 Service Provider. This software is included in the Java 2 SDK, v1.3. However, if you are using the Java 2 SDK, v1.2, you will need to follow these steps to install the software as an installed extension:

    • Download and uncompress the JNDI 1.2.1 Class Libraries and the LDAP 1.2.2 Service Provider from the JNDI Web site (http://java.sun.com/products/jnd).

    • Copy the libraries (jndi.jar, ldap.jar, providerutil.jar) from both packages to JAVA\lib\ext directory, where JAVA is the Java Runtime home (e.g. sys:\java or c:\jdk1.2.2\jre).

  2. An implementation of JSSE 1.0.2 is also required when using TLS/SSL with the eCommerce LDAP Beans. Sun's JSSE 1.0.2 package meets this requirement. Follow these steps to install Sun's implementation of JSSE:

    • Copy the library (jsse.jar) from the package to JAVA\lib\ext directory, where JAVA is the Java Runtime home (e.g. sys:\java or c:\jdk1.2.2\jre).

  3. If you are not going to use a TLS/SSL connection, you must enable clear text passwords by doing the following:

    • Run ConsoleOne and select your default container under the NDS tree.

    • Right-click on the LDAP Group object and select Properties.

    • On the General tab, mark "Allow Clear Text Passwords."

LDAP Connections

Interacting with an LDAP server requires a number of items, including a connection to the server. Connecting to a server requires initializing a session with the LDAP server over the server's LDAP port (typically 389). If the session initialization is successful, a connection handle is returned, which contains information about the connection to the LDAP server. When you use the standard LDAP API functions to interact with the LDAP server, you need to pass the connection handle as a parameter to most of the functions. When using Novell's eCommerce Beans for LDAP, the connection handle is hidden and the interaction with an LDAP server is simplified. This is demonstrate in the following examples.

Authenticating Methods for LDAP

Authentication Method 1 - Standard:

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.AuthenticateLdap"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setURL(request.getParameter("URL"));
   bean.setDN(request.getParameter("DN"));
   bean.setPassword(request.getParameter("password"));
   
   // Call the execute method of the command bean
   bean.execute();
   
   // Query the output properties of the command bean
   // Save connection object in session
   session.putValue("Connection",
   bean.getLdapConnection());
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3"
            bgcolor="white">
   <TBODY>
      <TR>
         <TD colspan="2" bgcolor="#CCCC99" width="400">
         <DIV class="tablehead1">AuthenticateLdap -
               Standard</DIV>
         </TD>
      </TR>
      <TR>
         <TD>
         <DIV class="indent1"><B><FONT color="green"
               size="+1">Success!</FONT></B></DIV>
         </TD>
         <TD></TD>
      </TR>
   </TBODY>
</TABLE>
</BODY>
</HTML>

Authentication Method 2 - SSL Connection:

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.AuthenticateLdap" 
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setURL(request.getParameter("URL"));
   bean.setDN(request.getParameter("DN"));
   bean.setPassword(request.getParameter("password"));
   bean.setProtocol("ssl");
   
   // Call the execute method of the command bean
   bean.execute();
   
   // Query the output properties of the command bean
   // Save connection object in session
   session.putValue("Connection", bean.getLdapConnection());
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">AuthenticateLdap - SSL Connection</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT></B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

Authentication Method 3 - Context-less login: Context-less login involves logging in using an e-mail address or any other entry attribute. There are two phases during the operation of context-less login. During the first phase, set the URL, CN, or Filter and Password. When execute() is called, the bean searches for matches to the CN or Filter. If only one match is found, the bean tries to authenticate using the Password. An exception is thrown if no matches are returned from the search. If more than one match is returned from the search, the isAuthenticated() method returns false. During the second phase, get the DNs from the bean. Choose one DN from the list and set the DN. When execute() is called the second time, the bean uses the distinguished name of the authentication object.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page import="com.novell.ecb.ldap.LdapConnection" %>
<%@ page import="com.novell.ecb.ldap.ContextlessLoginLdap" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.ContextlessLoginLdap"
scope="request" />
<%
   // Check request for dn parameter
   String dn = request.getParameter("DN");
   
   // Initial requst
   if (dn == null)
   {
      // Set the input properties of the command bean
      bean.setLdapSearchConnection((LdapConnection)session.getValue(
	  "Connection"));
      bean.setURL(request.getParameter("URL"));
      bean.setCN(request.getParameter("cn"));
      bean.setPassword(request.getParameter("password"));
   
      // Call the execute method of the command bean
      bean.execute();
   }
   
   // Followup request
   else
   {
      // Get command bean from session
      bean = (ContextlessLoginLdap)session.getValue("ContextlessLogin");
      session.removeValue("ContextlessLogin");
      
      // Set the input properties of the command bean
      bean.setDN(dn);
   
      // Call the execute method of the command bean
      bean.execute();
   }
   
   // Query the output properties of the command bean
   // Check authentication
   if (bean.isAuthenticated())
   {
      // Query the output properties of the command bean
      // Save connection object in session
      session.putValue("Connection", bean.getLdapConnection());
%>
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">ContextlessLoginLdap</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
<%
   }
   
   else
   {
      // Save command bean in session
      session.putValue("ContextlessLogin", bean);
%>
<FORM name="AuthenticateLdap3" action="AuthenticateLdap3.jsp" method="post">
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD bgcolor="#6B8899" colspan="2"  width="400">
<DIV class="tablehead2">ContextlessLoginLdap</DIV>
</TD>
</TR>
<TR bgcolor="white">
<TD colspan="2">
<DIV class="formdescriptext"></DIV>
</TD>
</TR>
<TR bgcolor="white">
<TD nowrap></TD>
<TD nowrap></TD>
</TR>
<TR bgcolor="white">
<TD colspan="2">
<DIV class="head3indent">DN</DIV>
</TD>
</TR>
<%
      // Query the output properties of the command bean
      // Loop through possible DNs
      String[] dns = bean.getDNs();
      for(int i=0; i<dns.length; i++)
      {
%>
<TR bgcolor="white">
   <TD nowrap colspan="2"><DIV class="indent1"><INPUT type="radio" name="DN"
   value="<%=dns[i]%>"<%=(i==0)?" checked":""%>> <%=dns[i]%>
   </DIV></TD>
</TR>
<%
      }
%>
<TR bgcolor="white">
<TD nowrap></TD>
<TD nowrap></TD>
</TR>
<TR bgcolor="white">
<TD nowrap></TD>
<TD nowrap></TD>
</TR>
<TR bgcolor="white">
<TD></TD>
<TD><INPUT type="submit" name="Submit" value="Submit"> <INPUT type="reset">
</TD>
</TR>
<TR bgcolor="white">
<TD colspan="2">
<HR noshade size="2">
</TD>
</TR>
</TBODY>
</TABLE>
</FORM>
<%
   }
%>
   
</BODY>
</HTML>

Authentication Method 4 - Public:

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.AuthenticateLdap"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setURL(request.getParameter("URL"));
   // Call the execute method of the command bean
   bean.execute();
   // Query the output properties of the command bean
   // Save connection object in session
   session.putValue("Connection", bean.getLdapConnection());
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">AuthenticateLdap - Public</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

Maintaining State for an LDAP Connection

Since the HTTP protocol is stateless, which means state is not maintained across multiple requests from the same user, there needs to be a way to preserve the state of the user's session. This is done by exploiting the state-saving mechanism presented by the HttpSession object exposed as an implicit object in all JSP pages. The session object can be used to store objects containing any arbitrary data that should be kept track of during the session with each client. The following example demonstrates how to use the implicit session object to store the LDAP connection object returned from the AuthenticateLdap bean:

<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.AuthenticateLdap"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setURL(request.getParameter("URL"));
   bean.setDN(request.getParameter("DN"));
   bean.setPassword(request.getParameter("password"));
   
   // Call the execute method of the command bean
   bean.execute();
   
   // Query the output properties of the command bean
   // Save connection object in session
   session.putValue("Connection", bean.getLdapConnection());
%>

Browsing LDAP Entries

The following code demonstrates how to browse LDAP entries.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">ListLdapEntries</DIV>
</TD>
</TR>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.ListLdapEntries"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setConnection((Connection)session.getValue("Connection"));
   bean.setName(request.getParameter("name"));
   
   // Call the execute method of the command bean
   bean.execute();
   
   // Query the output properties of the command bean
   String[] names = bean.getNames();
   
   for (int i=0; i < names.length; i++)
   {
      String color = (i % 2 == 0) ? "#FFFFFF" : "#EFEEE9";
%>
<TR bgcolor="<%=color%>">
<TD>
<DIV class="indent1"><%=names[i]%></DIV>
</TD>
</TR>
<%
   }
%>
   
</TBODY>
</TABLE>
</BODY>
</HTML>

Searching for LDAP entries

The following is an example of Search Method 1:

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">SearchLdapEntries - Match Attributes</DIV>
</TD>
</TR>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.SearchLdapEntries"
scope="request" />
<%
   // Allow a null attribute value
   String attrValue = request.getParameter("attrValue");
   if (attrValue != null && attrValue.length() == 0)
   {
      attrValue = null;
   }
   
   // Set the input properties of the command bean
   bean.setConnection((Connection)session.getValue("Connection"));
   bean.setName(request.getParameter("name"));
   bean.addMatchingAttribute(request.getParameter("attrName"), attrValue);
   
   // Call the execute method of the command bean
   bean.execute();
   
   // Query the output properties of the command bean
   String[] names = bean.getNames();
   
   for (int i=0; i < names.length; i++)
   {
      String color = (i % 2 == 0)? "#FFFFFF" : "#EFEEE9";
%>
<TR bgcolor="<%=color%>">
<TD>
<DIV class="indent1"><%=names[i]%></DIV>
</TD>
</TR>
<%
   }
%>
   
</TBODY>
</TABLE>
</BODY>
</HTML>

Search Method 2:

The following is an example of Search Method 2.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page import="com.novell.ecb.ldap.SearchLdapEntries"
%>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">SearchLdapEntries - Filter</DIV>
</TD>
</TR>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.SearchLdapEntries" 
scope="request" />
<%
   
   // Set the input properties of the command bean
   bean.setConnection((Connection)session.getValue("Connection"));
   bean.setName(request.getParameter("name"));
   bean.setFilter(request.getParameter("filter"));
   
   String scopeString = request.getParameter("scope");
   if (scopeString .equalsIgnoreCase("object"))
   {
      bean.setSearchScope(SearchLdapEntries.OBJECT_SCOPE);
   }
   else if (scopeString .equalsIgnoreCase("onelevel"))
   {
      bean.setSearchScope(SearchLdapEntries.ONELEVEL_SCOPE);
   }
   else if (scopeString .equalsIgnoreCase("subtree"))
   {
      bean.setSearchScope(SearchLdapEntries.SUBTREE_SCOPE);
   }
   
   // Call the execute method of the command bean
   bean.execute();
   
   // Query the output properties of the command bean
   String[] names = bean.getNames();
   
   for (int i = 0; i < names.length; i++)
   {
      String color = (i % 2 == 0)? "#FFFFFF" : "#EFEEE9";
%>
<TR bgcolor="<%=color%>">
<TD>
<DIV class="indent1"><%=names[i]%></DIV>
</TD>
</TR>
<%
   }
%>
</TBODY>
</TABLE>
</BODY>
</HTML>

Creating LDAP Entries

The code that follows shows how to create LDAP entries.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.CreateLdapEntry"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setConnection((Connection)session.getValue("Connection"));
   bean.setName(request.getParameter("name"));
   bean.addAttribute("objectClass", request.getParameter("objectClass"));
   
   // Call the execute method of the command bean
   bean.execute();
%>
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">CreateLdapEntry</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

Reading LDAP Entries

The following is an example of reading LDAP entries.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.ReadLdapEntry"
scope="request" />
<%
   try {
      // Instantiate the command bean
      ReadLdapEntry bean = new ReadLdapEntry();
   
      // Set the input properties of the command bean
      bean.setLdapConnection(connection);
      bean.setName("cn=wcoyote, o=acme");
   
      // Call the execute method of the command bean
      bean.execute();
   
      // Query the output properties of the command bean
      String cn = bean.getStringValue("cn");
      String sn = bean.getStringValue("sn");
   } catch (CommandException e) {
      // Handle exception
      out.println(e.toString());
   } 
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">ReadLdapEntry</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

Modifying LDAP Entries

The following code is used to modify attributes.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.ModifyLdapEntry"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setConnection((Connection)session.getValue("Connection"));
   bean.setName(request.getParameter("name"));
   
   String opString = request.getParameter("op");
   
   if (opString.equalsIgnoreCase("add")) // Add an attribute
   {
      bean.addAttribute(request.getParameter("attrName"),
         request.getParameter("attrValue"));
   }
   else if (opString.equalsIgnoreCase("remove")) // Remove an attribute
   {
      bean.removeAttribute(request.getParameter("attrName"));
   }
   else if (opString.equalsIgnoreCase("replace")) // Replace an attribute
   {
      bean.replaceAttribute(request.getParameter("attrName"),
         request.getParameter("attrValue"));
   }
   
   // Call the execute method of the command bean
   bean.execute();
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">ModifyLdapEntry</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>
   
Changing Password:
   
<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean
   id="bean"
   class="com.novell.ecb.ldap.ChangePasswordLdapEntry"
   scope="request" />
<%
   try {
      // Set the input properties of the command bean
      bean.setLdapConnection((Connection)session.getValue("Connection"));
      bean.setName("cn=wcoyote, o=acme");
      bean.setOldPassword("password");
      bean.setNewPassword("newPassword");
   
      // Call the execute method of the command bean
      bean.execute();
   } catch (CommandException e) {
      // Handle exception
      out.println(e.toString());
   } 
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">ChangePasswordLdapEntry</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>
   
Setting Password:
   
<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean
   id="bean"
   class="com.novell.ecb.ldap.SetPasswordLdapEntry"
   scope="request" />
<%
   try {
      // Instantiate the command bean
      SetPasswordLdapEntry bean = new SetPasswordLdapEntry();
      // Set the input properties of the command bean
      bean.setLdapConnection((Connection)session.getValue("Connection"));
      bean.setName("cn=wcoyote, o=acme");
      bean.setPassword("password");
   
      // Call the execute method of the command bean
      bean.execute();
   } catch (CommandException e) {
      // Handle exception
      out.println(e.toString());
   } 
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">SetPasswordLdapEntry</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

Deleting LDAP Entries

The following code is an example code for deleting LDAP entries.

<%@ page import="com.novell.ecb.Connection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Instantiate the command bean -->
<jsp:useBean id="bean" class="com.novell.ecb.ldap.DeleteLdapEntry"
scope="request" />
<%
   // Set the input properties of the command bean
   bean.setConnection((Connection)session.getValue("Connection"));
   bean.setName(request.getParameter("name"));
   
   // Call the execute method of the command bean
   bean.execute();
%>
   
<TABLE border="0" cellpadding="0" cellspacing="3" bgcolor="white">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#CCCC99" width="400">
<DIV class="tablehead1">DeleteLdapEntry</DIV>
</TD>
</TR>
<TR>
<TD>
<DIV class="indent1"><B><FONT color="green" size="+1">Success!</FONT>
</B></DIV>
</TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>

Summary

Novell's eCommerce Beans for LDAP provide Java components for integrating Web applications with Net services and LDAP directories. These components are 100 percent Java and use open protocols. Their architecture uses the Model-View-Controller (MVC) and Command design patterns. These components enable authentication and read/write directory access along with features such as contextless login and SSL security. Using Novell's eCommerce Beans for LDAP as the foundation for directory service access allows Web application developers to build on a platform that is secure, transportable, re-usable, and scalable.

References

http://developer.netscape.com/docs/manuals/dirsdk/dirsdk.htm

http://developer.novell.com/ndk/doc/ecb/ldap/index.html

http://www.ietf.org/html.charters/ldapbis-charter.html

http://www.ietf.cnri.reston.va.us/html.charters/ldup-charter.html

http://www.ietf.cnri.reston.va.us/html.charters/ldapext-charter.html

* Originally published in Novell AppNotes


Disclaimer

The origin of this information may be internal or external to Novell. While Novell makes all reasonable efforts to verify this information, Novell does not make explicit or implied claims to its validity.

© Copyright Micro Focus or one of its affiliates