Novell is now a part of Micro Focus

How to Use the eCommerce Beans for LDAP in Servlets,Java Server Pages, and Enterprise JavaBeans

Articles and Tips: article

J. Jeffrey Hanson
Senior Architect
Zareus
jhanson583@aol.com

01 Nov 2001


Novell's eCommerce LDAP Beans are easy-to-use Java components enabling developers to integrate Web applications with directory services. These components are based on open protocols, have no dependencies on native code and use the Model-View-Controller (MVC) and Command design patterns. These beans enable authentication and read/write directory services access along with contextless login and SSL security.


Topics

Java, Java Server Pages (JSP), Servlets, Enterprise JavaBeans, eCommerce Beans, LDAP

Products

NetWare

Audience

network designers, administrators, integrators

Level

intermediate

Prerequisite Skills

familiarity with Java, Java Server Pages, Servlets, Enterprise JavaBeans

Operating System

NetWare

Tools

eCommerce Beans for LDAP

Sample Code

yes

LDAP Overview

Directory services are designed to assist in locating organizations, people and other entities such as servers, printers, databases, groups, applications, etc. They link organizations and other entities together using a hierarchical tree structure and 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 that 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.

LDAP Connections

Interacting with an LDAP server requires a number of items, starting with 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, containing 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. The connection handle is hidden and the interaction with an LDAP server is simplified when using Novell's eCommerce Beans for LDAP, as we will demonstrate in the following examples.

Authenticating Users

The first step in accessing an LDAP-based tree is to authenticate to the tree with a user's credentials, such as, the user's id and password. We will show in the following code examples, how to use Novell's eCommerce LDAP Beans to accept data in proxy for a user and authenticate the user to an LDAP-based tree. We will show how to perform LDAP-authentication in a JavaServer Page, a Servlet and an Enterprise Java Bean.

Using JavaServer Pages

<%@ page import="com.novell.ecb.ldap.LdapConnection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Include 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>

Using Servlets

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
   throws ServletException, IOException
{
   // Instantiate the command bean
   com.novell.ecb.ldap.AuthenticateLdap   bean = null;
   
   try {
      // Instantiate the command bean
      bean = (com.novell.ecb.ldap.AuthenticateLdap)
         java.beans.Beans.instantiate(this.getClass().getClassLoader(),
            "com.novell.ecb.ldap.AuthenticateLdap");
   
      // 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();
   
      // Save connection object in session
      HttpSession   session = request.getSession(true);
      session.putValue("Connection", bean.getLdapConnection());
   
      response.setContentType("text/html");
      PrintWriter   out = response.getWriter();
   
      out.println("<HTML>");
      out.println("<HEAD>");
      out.println("</HEAD>");
      out.println("<BODY>");
      out.println("<TABLE border=\"0\" cellpadding=\"0\""
                     +" cellspacing=\"3\" bgcolor=\"white\">");
      out.println("  <TBODY>");
      out.println("    <TR>");
      out.println("      <TD colspan=\"2\" bgcolor=\"#CCCC99\""
                     +" width=\"400\">");
      out.println("      <DIV class=\"tablehead1\">AuthenticateLdap - SSL"
                              +" Connection</DIV>");
      out.println("      </TD>");
      out.println("    </TR>");
      out.println("    <TR>");
      out.println("      <TD>");
      out.println("      <DIV class=\"indent1\"><B><FONT
	  color=\"green\""
         +" size=\"+1\">Success!</FONT></B></DIV>");
      out.println("      </TD>");
      out.println("      <TD></TD>");
      out.println("    </TR>");
      out.println("  </TBODY>");
      out.println("</TABLE>");
      out.println("</BODY>");
      out.println("</HTML>");
   } catch(ClassNotFoundException e) {
      System.out.println("Error: " +e.toString());
   } catch(com.novell.ecb.CommandException e) {
      System.out.println("Error: " +e.toString());
   }
}

Using Enterprise JavaBeans

The Enterprise JavaBeans architecture defines two kinds of remote objects, entity beans and session beans. Entity beans are mainly used to represent persistent entities such as, rows in a relational database. Session beans have a relatively short lifetime, usually the equivalent of a client's session. The length of the client's session is application specific, for example, it could be the duration of a Web application in a browser, the duration that an applet is running or the duration that a stand-alone application runs. In this article, we will focus on session beans for our discussions and code examples.

There are two kinds of session beans, stateless and stateful. A stateless session bean stores no conversational state between itself and a client across method calls, while a stateful session bean maintains conversational state between itself and a client across multiple method calls.

In this article, we will be referring to stateful session beans in our code samples, thus, we will not need to worry about restoring the state of our Enterprise Java Beans for each method call. We will also leave the intricate details of stateful session beans such as, passivation, activation, create methods, etc. for another article. Instead, we will discuss the business methods of stateful session beans and how to use them to exploit the functionality of Novell's eCommerce LDAP Beans. For example, in the following code sample, we use the business method, authenticate, to embody the functionality for authenticating to an LDAP-based tree.

public interface MyLDAP extends javax.ejb.EJBObject
{
   public void authenticate(String url, String userDN, String password)
      throws java.rmi.RemoteException;
}
   
public class MyLDAPBean implements javax.ejb.SessionBean
{
   private com.novell.ecb.ldap.LdapConnection   _conn = null;
   
   public void ejbRemove()
   {
   }
   
   public void setSessionContext(javax.ejb.SessionContext ctx)
{
}
   
   public void ejbPassivate()
   {
   }
   
   public void ejbActivate()
   {
   }
   
   public void authenticate(String url, String userDN, String password)
      throws java.rmi.RemoteException
   {
      try {
         // Instantiate the command bean
         com.novell.ecb.ldap.AuthenticateLdap   bean =
            (com.novell.ecb.ldap.AuthenticateLdap)
               java.beans.Beans.instantiate(this.
			   getClass().getClassLoader(),
                  "com.novell.ecb.ldap.AuthenticateLdap");
   
         // Set the input properties of the command bean
         bean.setURL(url);
         bean.setDN(userDN);
         bean.setPassword(password);
         bean.setProtocol("ssl");
   
         // Call the execute method of the command bean
         bean.execute();
   
         // Save connection object
         _conn = bean.getLdapConnection();
      } catch(ClassNotFoundException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(java.io.IOException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(com.novell.ecb.CommandException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      }
   }
}

Maintaining State

Since the HTTP protocol is stateless, i.e. does not maintain state across multiple requests from the same user, we need a way to preserve the state of the user's session. We do this by exploiting the state-saving mechanism presented to us 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 we need to keep track of during our session with each client. The following examples demonstrate how to use the implicit session object to store the LDAP connection object returned from the AuthenticateLdap bean.

LDAP Connection Using JavaServer Pages

<!-- Include 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();
   
   // Save connection object in session
   session.putValue("Connection", bean.getLdapConnection());
%>

LDAP Connection Using Servlets

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
   throws ServletException, IOException
{
   com.novell.ecb.ldap.AuthenticateLdap   bean = null;
   
   try {
      // Instantiate the command bean
      bean = (com.novell.ecb.ldap.AuthenticateLdap)
            java.beans.Beans.instantiate(this.getClass().
			getClassLoader(),
               "com.novell.ecb.ldap.AuthenticateLdap");
   
      // 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();
   
      // Save connection object in session
      HttpSession   session = request.getSession(true);
      session.putValue("Connection", bean.getLdapConnection());
   } catch(ClassNotFoundException e) {
      System.out.println("Error: " +e.toString());
   } catch(com.novell.ecb.CommandException e) {
      System.out.println("Error: " +e.toString());
   }
}

LDAP Connection Using Enterprise JavaBeans

With a stateful session bean, the Enterprise Java Bean's container maintains the conversational state. We maintain our LDAP connection by declaring a member variable and setting it to the return value of the eCommerce bean's method, getLdapConnection, as in the following example.

public class MyLDAPBean implements javax.ejb.SessionBean
{
   private com.novell.ecb.ldap.LdapConnection   _conn = null;
   
   public void ejbRemove()
   {
   }
   
   public void setSessionContext(javax.ejb.SessionContext ctx)
   {
   }
   
   public void ejbPassivate()
   {
   }
      
   public void ejbActivate()
   {
   }
   
   public void authenticate(String url, String userDN, String password)
      throws java.rmi.RemoteException
   {
      try {
         // Instantiate the command bean
         com.novell.ecb.ldap.AuthenticateLdap   bean =
            (com.novell.ecb.ldap.AuthenticateLdap)
               java.beans.Beans.instantiate(this.getClass().
			   getClassLoader(),
                  "com.novell.ecb.ldap.AuthenticateLdap");
   
         // Set the input properties of the command bean
         bean.setURL(url);
         bean.setDN(userDN);
         bean.setPassword(password);
         bean.setProtocol("ssl");
      
         // Call the execute method of the command bean
         bean.execute();
      
         // Save connection object
         _conn = bean.getLdapConnection();
      } catch(ClassNotFoundException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(java.io.IOException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(com.novell.ecb.CommandException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      }
   }
}

Browsing LDAP Entries Using JavaServer Pages

A common operation performed on an LDAP-based tree is to allow users to browse over the entries at a certain location or context in the tree. Once the user has found the desired entry, operations such as, adding attribute values, modifying attribute values or removing attribute values can be performed on the entry. The following examples will show how to use Novell's eCommerce LDAP Beans to browse for entries in an LDAP-based tree.

<%@ 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>

Browsing LDAP Entries Using Servlets

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
   throws ServletException, IOException
{
   response.setContentType("text/html");
   PrintWriter   out = response.getWriter();
   
   out.println("<HTML>");
   out.println("<HEAD>");
   out.println("</HEAD>");
   out.println("<BODY>");
   
   com.novell.ecb.ldap.ListLdapEntries   bean = null;
   
   try {
      // Instantiate the command bean
      bean = (com.novell.ecb.ldap.ListLdapEntries)
            java.beans.Beans.instantiate(this.getClass().
			getClassLoader(),
               "com.novell.ecb.ldap.ListLdapEntries");
   
      // Set the input properties of the command bean
      HttpSession   session = request.getSession(true);
      bean.setConnection((com.novell.ecb.ldap.LdapConnection)
      session.getValue("Connection"));
      bean.setName(request.getParameter("name"));
   
      // Call the execute method of the command bean
      bean.execute();
   
      out.println("<TABLE border=\"0\" cellpadding=\"0\""
                  +" cellspacing=\"3\" bgcolor=\"white\">");
      out.println("  <TBODY>");
      out.println("    <TR>");
      out.println("      <TD bgcolor=\"#CCCC99\" width=\"400\">");
      out.println("      <DIV class=\"tablehead1\">"
                        +"ListLdapEntries</DIV>");
      out.println("      </TD>");
      out.println("    </TR>");
      
      // 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";
         out.println("    <TR bgcolor=\"" +color +"\">");
         out.println("      <TD>");
         out.println("      <DIV class=\"indent1\">" +names[i] +"</DIV>");
         out.println("      </TD>");
         out.println("    </TR>");
      }
   
      out.println("  </TBODY>");
      out.println("</TABLE>");
   } catch(ClassNotFoundException e) {
      out.println("<P> Error: " +e.toString());
   } catch(com.novell.ecb.CommandException e) {
      out.println("<P> Error: " +e.toString());
   }
   
   out.println("</BODY>");
   out.println("</HTML>");
}

Browsing LDAP Entries Using Enterprise JavaBeans

public interface MyLDAP extends javax.ejb.EJBObject
{
   public void authenticate(String url, String userDN, String password)
      throws java.rmi.RemoteException;
   
   public String[] browse(String name)
      throws java.rmi.RemoteException;
}
   
public class MyLDAPBean implements javax.ejb.SessionBean
{
   private com.novell.ecb.ldap.LdapConnection   _conn = null;
   
   public void ejbRemove()
   {
   }
   
   public void setSessionContext(javax.ejb.SessionContext ctx)
   {
   }
   
   public void ejbPassivate()
   {
   }
   
   public void ejbActivate()
   {
   }
   
   
   public void authenticate(String url, String userDN, String password)
      throws java.rmi.RemoteException
   {
      try {
         // Instantiate the command bean
         com.novell.ecb.ldap.AuthenticateLdap   bean =
            (com.novell.ecb.ldap.AuthenticateLdap)
               java.beans.Beans.instantiate(this.getClass().getClassLoader(),
                  "com.novell.ecb.ldap.AuthenticateLdap");
   
         // Set the input properties of the command bean
         bean.setURL(url);
         bean.setDN(userDN);
         bean.setPassword(password);
         bean.setProtocol("ssl");
   
         // Call the execute method of the command bean
         bean.execute();
   
         // Save connection object
         _conn = bean.getLdapConnection();
      } catch(ClassNotFoundException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(java.io.IOException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(com.novell.ecb.CommandException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      }
   }
   
   public String[] browse(String name)
      throws java.rmi.RemoteException
   {
      try {
         // Instantiate the command bean
         com.novell.ecb.ldap.ListLdapEntries   bean =
            (com.novell.ecb.ldap.ListLdapEntries)
               java.beans.Beans.instantiate(this.getClass().getClassLoader(),
                  "com.novell.ecb.ldap.ListLdapEntries");
   
         // Set the input properties of the command bean
         bean.setConnection(_conn);
         bean.setName(name);
   
         // Call the execute method of the command bean
         bean.execute();
   
         // return names
         return (bean.getNames());
      } catch(ClassNotFoundException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(java.io.IOException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(com.novell.ecb.CommandException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      }
   }
}

Reading Attributes

Once a user has successfully authenticated to an LDAP-based tree, the user can access the attributes of the entry using Novell's eCommerce LDAP Beans. The following code samples show how to use Novell's eCommerce LDAP Beans in a JavaServer Page, a Servlet and an Enterprise Java Bean to view some of the attributes of an entry found at a given context within an LDAP-based tree.

Reading LDAP Attributes Using JavaServer Pages

<%@ page import="com.novell.ecb.ldap.LdapConnection" %>
<%@ page errorPage="..error.jsp" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
   
<!-- Include 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)
                              session.getValue("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">Common Name: <%=cn%></FONT></B>
         </DIV>
         </TD>
         <TD></TD>
      </TR>
      <TR>
         <TD>
         <DIV class="indent1">
            <B><FONT color="red" size="+1">Surname: <%=sn%></FONT></B>
         </DIV>
         </TD>
         <TD></TD>
      </TR>
   </TBODY>
</TABLE>
</BODY>
</HTML>

Reading LDAP Attributes Using Servlets

public void doGet (HttpServletRequest request,
                     HttpServletResponse response)
   throws ServletException, IOException
{
   response.setContentType("text/html");
   PrintWriter   out = response.getWriter();
   
   out.println("<HTML>");
   out.println("<HEAD>");
   out.println("</HEAD>");
   out.println("<BODY>");
   
   // Instantiate the command bean
   com.novell.ecb.ldap.ReadLdapEntry   bean = null;
   
   try {
      // Instantiate the command bean
      bean = (com.novell.ecb.ldap.ReadLdapEntry)
         java.beans.Beans.instantiate(this.getClass().getClassLoader(),
         "com.novell.ecb.ldap.ReadLdapEntry");
   
      // Set the input properties of the command bean
         HttpSession   session = request.getSession(true);
      bean.setLdapConnection((com.novell.ecb.ldap.LdapConnection)
      session.getValue("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");
   
      out.println("<TABLE border=\"0\" cellpadding=\"0\""
                  +" cellspacing=\"3\" bgcolor=\"white\">");
      out.println("  <TBODY>");
      out.println("    <TR>");
      out.println("      <TD colspan=\"2\" bgcolor=\"#CCCC99\""
                     +" width=\"400\">");
      out.println("      <DIV class=\"tablehead1\">ReadLdapEntry</DIV>");
      out.println("      </TD>");
      out.println("    </TR>");
      out.println("    <TR>");
      out.println("      <TD>");
      out.println("      <DIV class=\"indent1\"><B><FONT color=\"green\""
                  +" size=\"+1\">Common Name: " +cn +"</FONT></B></DIV>");
      out.println("      </TD>");
      out.println("      <TD></TD>");
      out.println("    </TR>");
      out.println("    <TR>");
      out.println("      <TD>");
      out.println("      <DIV class=\"indent1\"><B><FONT color=\"red\""
                  +" size=\"+1\">Surname: " +sn +"</FONT></B></DIV>");
      out.println("      </TD>");
      out.println("      <TD></TD>");
      out.println("    </TR>");
      out.println("  </TBODY>");
      out.println("</TABLE>");
   } catch(ClassNotFoundException e) {
      out.println("<P>Error: " +e.toString());
   } catch(com.novell.ecb.CommandException e) {
      out.println("<P>Error: " +e.toString());
   }
   
      out.println("</BODY>");
   out.println("</HTML>");
}

Reading LDAP Attributes Using Enterprise JavaBeans

public interface MyLDAP extends javax.ejb.EJBObject
   {
      public void authenticate(String url, String userDN, String password)
         throws java.rmi.RemoteException;
      
      public String[] read(String name)
         throws java.rmi.RemoteException;
   }
      
   public class MyLDAPBean implements javax.ejb.SessionBean
   {
      private com.novell.ecb.ldap.LdapConnection   _conn = null;
      
      public void ejbRemove()
      {
      }
      
      public void setSessionContext(javax.ejb.SessionContext ctx)
      {
      }
      
      public void ejbPassivate()
      {
      }
      
      public void ejbActivate()
      {
      }
      
      public void authenticate(String url, String userDN, String password)
         throws java.rmi.RemoteException
      {
         try {
            // Instantiate the command bean
            com.novell.ecb.ldap.AuthenticateLdap   bean =
            (com.novell.ecb.ldap.AuthenticateLdap)
            java.beans.Beans.instantiate(this.getClass().getClassLoader(),
            "com.novell.ecb.ldap.AuthenticateLdap");
   
            // Set the input properties of the command bean
            bean.setURL(url);
            bean.setDN(userDN);
            bean.setPassword(password);
            bean.setProtocol("ssl");
      
            // Call the execute method of the command bean
            bean.execute();
   
            // Save connection object
            _conn = bean.getLdapConnection();
         } catch(ClassNotFoundException e) {
            throw new java.rmi.RemoteException("Error: " +e.toString());
         } catch(java.io.IOException e) {
            throw new java.rmi.RemoteException("Error: " +e.toString());
         } catch(com.novell.ecb.CommandException e) {
            throw new java.rmi.RemoteException("Error: " +e.toString());
         }
   }
      
   public String[] read(String name)
      throws java.rmi.RemoteException
   {
      try {
         // Instantiate the command bean
         com.novell.ecb.ldap.ReadLdapEntry   bean =
            (com.novell.ecb.ldap.ReadLdapEntry)
         java.beans.Beans.instantiate(this.getClass().getClassLoader(),
            "com.novell.ecb.ldap.ReadLdapEntry");
   
         // Set the input properties of the command bean
         bean.setConnection(_conn);
         bean.setName(name);
   
         // Call the execute method of the command bean
         bean.execute();
   
         // Query the output properties of the command bean
         String[]   values = new String[2];
         values[0] = bean.getStringValue("cn");
         values[1] = bean.getStringValue("sn");
   
         // return values
         return (values);
      } catch(ClassNotFoundException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(java.io.IOException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
      } catch(com.novell.ecb.CommandException e) {
         throw new java.rmi.RemoteException("Error: " +e.toString());
   }
   }
}

Summary

Novell's eCommerce Beans for LDAP provide Java components to integrate Web applications with LDAP-based directory trees. Since these components are 100% Java, they can be used with JavaServer Pages, Servlets and Enterprise JavaBeans. 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, enables Web application developers to build on a platform that is secure, transportable, re-usable and scalable.

For more information on these topics, see the following URLs:

* 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