在Apache目录服务器中存储Java对象,第2部分:(下)

应用程序 4. 搜索存储的数据

先从 ApacheDS 上的一个简单搜索开始。假设在 ApacheDS 中有许多用户。而您想要找到用户 Alice 的所有详细信息。下面列出了关于 Alice 的所有已知事项:

Alice 是一名用户,所以在用户的数据组织单元中应当可以查找她的数据条目。(在第 1 部分已经介 绍了组织单元或 “ou” 的概念。)

Alice 的用户名是 “alice”(不区分大小写)。

Alice 是一个人,所以她的数据条目使用的对象类必须直接或间接地扩展 person 对象类。

现在请参见清单 6,它显示了名为 SearchForAlice 的应用程序。SearchForAlice 演示了一个非常简 单的搜索场景;后面我将扩展这个应用程序,使其适合更高级的搜索场景。

清单 6. SearchForAlice

public class SearchForAlice {
   public SearchForAlice() {
     try
     {
       //------------------------------------------
       //Step1: Setting up JNDI properties for ApacheDS
       //------------------------------------------
       InputStream inputStream = new FileInputStream ( "ApacheDS.properties");
       Properties properties = new Properties();
       properties.load(inputStream);
       properties.setProperty("java.naming.security.credentials",  "secret");

       //------------------------------------------
       // Step2: Fetching a DirContext object
       //------------------------------------------
       DirContext ctx = new InitialDirContext(properties);

       //---------------------------------------------
       //Step3: Setting search context
       //---------------------------------------------
       String searchContext = "ou=users";

       //--------------------------------------------
       //Step4: Creating search attributes for Alice
       //--------------------------------------------
       Attribute uid = new BasicAttribute("uid");
       Attribute objclass = new BasicAttribute("objectClass");

       //adding attribute values
       uid.add("Alice");
       objclass.add("person");

       //Instantiate Attributes object and put search attributes in it.
       Attributes attrs = new BasicAttributes(true);
       attrs.put(uid);
       attrs.put(objclass);

       //------------------------------------------
       //Step5: Executing search
       //------------------------------------------
       NamingEnumeration ne = ctx.search(searchContext, attrs);

       if (ne != null)
       {
         //Step 6: Iterating through SearchResults
         while (ne.hasMore()) {
           //Step 7: Getting individual SearchResult object
           SearchResult sr = (SearchResult) ne.next();

           //Step 8:
           String entryRDN = sr.getName();
           System.out.println("RDN of the Searched entry:  "+entryRDN);

           //Step 9:
           Attributes srAttrs = sr.getAttributes();

           if (srAttrs != null) {
              //Step 10:
              for (Enumeration e = attrs.getAll() ; e.hasMoreElements()  ;)
              {
                Attribute attr = (Attribute) e.nextElement();

                //Step 11:
                String attrID = attr.getID();
                System.out.println("Attribute Name: "+attrID);
                System.out.println("Attribute Value(s):");

                NamingEnumeration e1 = attr.getAll();
                while (e1.hasMore())
                  System.out.println("\t\t"+e1.nextElement());
              }//for()
           }//if (srAttrs)
         }
       }//if (ne != null)

     } catch (Exception e) {
       System.out.println("Operation failed: " + e);
     }
   }

   public static void main(String[] args) {
    SearchForAlice searchAlice = new SearchForAlice();
   }
  }

时间: 2024-12-02 19:42:25

在Apache目录服务器中存储Java对象,第2部分:(下)的相关文章

在Apache目录服务器中存储Java对象,第2部分:(上)

在 ApacheDS 中存储.搜索和检索 Java 对象 简介:在第 2 部分中将介绍如何在 Apache 目录服务器 (ApacheDS) 中存储 Java 对象, Bilal Siddiqui 将提供 9 个示例应用程序,演示在 第 1 部分 中学习的概念.除 了介绍使用 ApacheDS 存储.搜索.检索和修改 Java 对象的所有步骤之外,Bilal 还将在总结全文时提 供一个可重用的 Java 类,该类可以使用 LDAP 模式组件在 ApacheDS 中将这些功能组合在一起. 在 第

在Apache目录服务器中存储Java对象,第1部分

简介:这个两部分的系列介绍了在 Apache 目录服务器(ApacheDS)中保存 Java 对象的步骤 .在第 1 部分中,作者 Bilal Siddiqui 介绍了 ApacheDS,并提供了 ApacheDS 核心架构的概述.因为 主要把 ApacheDS 用作保存 Java 对象的 LDAP 服务器,所以 Bilal 提供了对 LDAP 概念和术语的快速 概述.他还介绍了如何用 JXplorer 查看 LDAP 模式组件,例如属性类型和对象类,还介绍了如何在 ApacheDS 中输入数据

Mysql存储java对象实例详解_java

Mysql存储java对象 MySQL  设置字段为 blob 保存对象,先将对象序列化为byte[]  使用 setObject(byte[] bytes) ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; try { out = new ObjectOutputStream(baos); out.writeObject(java实例对象); } catch (IOE

黑客曾某修改网络游戏《梦幻西游》服务器中存储的数据,以此牟利

据http://www.aliyun.com/zixun/aggregation/31142.html">检察机关起诉书指控,2009年8月,曾某发现<梦幻西游>游戏程序存在技术漏洞.后来他自行编写外挂,利用上述漏洞,对涉案网络游戏服务器中存储的数据进行修改.增加等操作,使其可以在游戏中凭空生成游戏币. 2009年8月至2010年5月间,被告人曾某利用此方法,反复进行上述操作,刷取大量游戏币,严重影响了涉案计算机信息系统的正常运行.其间,被告人曾某将刷取的游戏币通过互联网进行销

在配置文件(.settings、.config)中存储自定义对象

原文:在配置文件(.settings..config)中存储自定义对象 引言 我前面曾写过一篇<使用配置文件(.settings..config)存储应用程序配置>,我在其中指出"settings无法实现对一些复杂类型及自定义类型的支持". 而今天我发现其实它是支持自定义类型的,仅仅是不能支持本项目中的自定义类型,可以支持引用的项目或类库的自定义类型.至于为什么不支持本项目中的自定义类型,我也不得而知,猜想可能是怕加载时造成冲突吧.   范例 我们来做一个使用自定义类型的配

通过一条sql语句访问不同数据库服务器中的数据库对象的方法

对象|访问|服务器|数据|数据库|语句 在我们做数据库程序开发的时候,经常会遇到这种情况:需要将一个数据库服务器中的数据导入到另一个数据库服务器的表中.通常我们会使用这种方法:先把一个数据库中的数据取出来放到某出,然后再把这些数据一条条插入到目的数据库中,这种方法效率较低,写起程序来也很繁琐,容易出错.另外一种方法是使用bcp或BULK INSERT语句,将数据导入到一个文件中,再从此文件中导出到目的数据库,这种方法虽然效率稍高,但也有很多不如意的地方,单是在导入时怎样找到另外一台机器上的数据导

如何在数据库中存储Java指令?

Java是一种面向对象的语言,因此其指令(源代码)以类的形式出现.要在数据库中执行Java,您可以在数据库外编写Java指令并在数据库外将它们编译为已编译的类(字节代码),这些类是包含Java指令的二进制文件. 然后,将这些已编译的类安装到数据库中.安装之后,便可以在数据库服务器中将这些类作为存储过程来执行了.例如,下面的语句创建一个Java存储过程: CREATE PROCEDURE insertfix() EXTERNAL NAME 'JDBCExample.InsertFixed ()V'

如何在apcheds 2.0.0 M8目录服务器中添加partition

问题描述 进来研究apacheds 2.0.0 M8,遇partition概念.大概是分区的意思,区分各种不同的业务数据.为了更好地保证业务的独立性,现欲添加两个在Root DSE下添加两个独立partion,dn分别为ou=staffs,ou=customers,分别用来存储员工和客户信息,但是,分别采用apache directory studio和原始jndi代码,经过N次尝试之后,未能成功,望有接触过apacheds的仁兄给点帮助,谢谢! 解决方案 你说的是不是partition啊?你要

使用Acegi保护Java应用程序,第2部分: 使用LDAP目录服务器

使用 ApacheDS 和 Acegi 实现访问控制 了解了 Acegi 安全系统(Acegi Security System)的 基础知识 后,我们 将介绍该系统的更加高级的应用.在本文中,Bilal Siddiqui 向您展示了如何 结合使用 Acegi 和一个 LDAP 目录服务器,实现灵活的具有高性能的 Java 应用程序的安全性.还将了解如何编写访问控制策略并将其存储在 ApacheDS 中,然后配置 Acegi 使其与目录服务器交互,从而实现身份验证和授 权的目的. 这期共分三部分的