• Lotus的JAVA与DOMINO通过LDAP集成方法!


    摘要:LDAP是标准轻量目录访问协议(Lightweight Directory Access Protocol),通过LDAP,你可以访问目录中的用户信息,进行用户验证。DominoR5/6支持标准的LDAP v3目录服务。本文通过描述使用JNDI访问Domino目录的过程,为大家介绍如何充分利用机构中已有的Domino目录资源。本文所述的方法也适用于其他支持LDAP v3的目录服务器
    为什么目录服务如此重要
    随着企业应用程序的增加,我们不得不面对日益增长的各类用户数据。这些用户数据分布在企业各处,带来了很大管理和维护上的麻烦。为了解决这个问题,我们通常需要在企业中构建标准的目录基础设施。同时,在实施EAI(企业应用集成)时,我们还经常会遇到用户需要单点登录(SSO)的情况,而成功实施SSO的基础是我们有一个好的目录基础。
    目前,在很多的机构中都实施了基于Domino的应用,例如:办公邮件、审批等。做为一个兼容各种标准的优秀平台,Domino也提供了对LDAP v3的良好支持。
    那么,对于已经架设Domino基础设施的机构,是否考虑从现有的投资中获得更多的回报呢?下面,我们通过两个范例来了解如何充分利用这些保存在Domino中的目录资源。
    准备工作
    1、 了解JNDI
    JNDI(Java Naming And Directory Interface)是在Java中访问各种命名和目录服务的规范。它通过一组扩展的API:javax.naming.*来提供对命名和目录服务的访问。
    使用JNDI前,你必须确保你拥有jndi.jar,并且在当前ClassPath中包含它。如果你还没有jndi.jar,可通过参考资料处下载。
    2、 配置Domino服务器
    在使用下列范例前,你必须先启动你的Domino服务器(我使用R6版本)中,并且启用LDAP服务。
    由于我们不需要使用任何特殊的选项,我们无须对Domino的LDAP配置做出任何修改,仅须确认已加载了LDAP服务(在Domino Console上输入:show tasks来查看是否加载了LDAP服务)。如果还没有加载LDAP服务,你可以通过在Domino的服务器控制台上输入:load ldap来加载它。
    读取目录信息
    下面的代码从目录中读取给定用户的邮件地址。
    package net.eservice4you.ldap;
    import javax.naming.Context;
    import javax.naming.directory.InitialDirContext;
    import javax.naming.directory.DirContext;
    import javax.naming.directory.Attributes;
    import javax.naming.NamingException;
    import java.util.Hashtable;
    class Getattr {
        public static void main(String[] args) {
    // Identify service provider to use
    //将初始化的信息放到一个hashtable中去
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=BJCHP");
    // 你需要将localhost改为domino服务器的全称或IP,并且,将O=改为你的Domino组织名称
    try {
    // Create the initial directory context
        DirContext ctx = new InitialDirContext(env);
        // Ask for all attributes of the object
        // 你需要将xinxibu改为服务上已有的注册用户
        Attributes attrs = ctx.getAttributes("cn=xinxibu");
        // Find the mail address and print it
    System.out.println("Mail: " + attrs.get("mail").get());
        // Close the context when we're done
        ctx.close();
    } catch (NamingException e) {
        System.err.println("Problem getting attribute: " + e);
    }
        }
    }
    从代码中,我们看到读取目录信息的过程:
    1. 设置所使用的Service Provider 和Service URI到Hashtable中。
    2. 初始化一个DirContext。
    3. 使用Context.getAttributes来获取指定用户的所有属性信息。
    4. 使用attrs.get(“xxx”)来获得属性信息。
    5. 关闭Context的连接。
    注:在Domino LDAP目录默认只允许查找部分用户信息。你可以查看Domino Administrator Help中“Domino目录\Domino LDAP服务”一节,加入更多的属性到列表中。
    验证用户身份
    下面的代码通过请求LDAP用户登录,来验证用户的身份。
    package net.eservice4you.ldap;
    import javax.naming.Context;
    import javax.naming.directory.InitialDirContext;
    import javax.naming.directory.DirContext;
    import javax.naming.NamingException;
    import javax.naming.AuthenticationException;
    import java.util.Hashtable;
    class AuthUser {
        public static void main(String[] args) {
    // Identify service provider to use
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=BJCHP");
       // 你需要将localhost改为domino服务器的全称或IP,并且,将O=改为你的Domino组织名称
    // Authenticate as xinxibu and password "1234"
       env.put(Context.SECURITY_AUTHENTICATION, "simple");
       env.put(Context.SECURITY_PRINCIPAL, "cn=xinxibu,o=BJCHP");
       env.put(Context.SECURITY_CREDENTIALS, "1234");
    try {
    // Create the initial directory context
        DirContext ctx = new InitialDirContext(env);
        System.out.println("Authentication Ok!");
        ctx.close();
    }catch (AuthenticationException e){
    // 如果捕捉到AuthenticationException,表示验证失败
    System.err.println("Authentication Fail:"+e);
    } catch (NamingException e) {
        System.err.println("Nameing Exception: " + e);
    }
        }
    }
    我们可以看到,要验证用户,我们需要做以下几件事:
    1. 设置所使用的Service Provider 和URL到Hashtable中。
    2. 设置验证方式,用户名和密码(对于simple)。
    3. 初始化一个DirContext。如果捕捉到AuthenticationException异常,表示验证失败。
    4. 关闭Context的连接。
    除了我们刚才使用的simple方式外,还可以使用Digest-MD5, Kerberos V5和X.509等方式来验证。你可以查看参考资料来了解具体的细节。
    总结
    如果你的机构中已使用了Domino,如果你需要应用集成,是时候考虑LDAP!
    本文所述的方法,同样适用于IBM Directory Server和OpenLDAP等其他目录服务器。我在JDK 1.4.1+ Domino 6下测试通过了这些代码。你也可以使用Domino 5,它同样可以工作的很好。
    参考资料
    ** 下载范例代码:jndiExample.jar
    ** 访问java.sun.com/products/jndi可以了解有关JNDI的最新情况,下载JNDI API。你还看看JNDI Tutorial : java.sun.com/products/jndi/tutorial/index.html。
    ** 关于LDAP,你可以访问 LDAPman RFC 页面来了解LDAP RFC。在developer works上,你还可以找到一篇关于如何构建LDAP地址本的教学:http://www-900.ibm.com/developer ... tutorial/index.html
  • 相关阅读:
    Linux下安装MySQL5.6
    Linux软件安装管理:rpm与yum
    Linux进程管理
    Linux网络配置
    Linux磁盘分区、挂载
    Django基础之模型层(models.py)、ORM查询之单表查询、多表查询和跨表查询
    Django基础之视图层(views.py)和模板层
    数据的编辑和删除、Django基础之路由层(urls.py)
    小白必会三板斧、静态文件配置、request对象及方法、pycharm和django连接数据库、字段的增删改查和数据的增查
    初识web框架和Django框架
  • 原文地址:https://www.cnblogs.com/hannover/p/2021923.html
Copyright © 2020-2023  润新知