Interstage Application Server Smart Repository運用ガイド
目次 索引 前ページ次ページ

第6章 アプリケーションの作成(JNDI)> 6.2 サンプルプログラム

6.2.3 サンプルプログラムの紹介

 ここでは、エントリの検索を行う場合のサンプルプログラムを紹介します。このサンプルは、指定したリポジトリサーバに対してSSLを使用した簡易認証による検索を行い、検索結果のエントリ情報を出力します。

 その他のサンプルプログラムについては、ソースファイルを直接参照してください。

/* Copyright (c) 2004 FUJITSU LIMITED
 * All Rights Reserved.
 *
 * エントリの検索を行う(SSL動作用)
 */ 

import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Properties;

import javax.naming.*;
import javax.naming.directory.*;
import com.sun.jndi.ldap.*;

class Search {

/*
 *  環境定義パラメタ
 *  (実行環境に合わせて以下のパラメタを変更する必要があります。)
 */
public static final String ldapurl     = "ldap://localhost:636/";
public static final String binddn      = "cn=manager,ou=interstage,o=fujitsu,dc=com";
public static final String password    = "secret";
public static final String sslenvfile  = "D:\\conf\\sslconfig.cfg";
public static final String ssllogdir   = "D:\\log";
public static final String s_base      = "ou=interstage,o=fujitsu,dc=com";
public static final String filter      = "cn=User001";

public static void main(String[] args) {

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

        /* 環境プロパティの設定 */
        env.put(Context.PROVIDER_URL,              ldapurl   );
        env.put(Context.SECURITY_AUTHENTICATION,   "simple"  );
        env.put(Context.SECURITY_PRINCIPAL,        binddn    );
        env.put(Context.SECURITY_CREDENTIALS,      password  );
        /* SSL用の環境プロパティの設定 */
        env.put("java.naming.ldap.factory.socket", "com.fujitsu.ssl.FjSSLSocketFactory"); 
        env.put(Context.SECURITY_PROTOCOL,         "ssl"     );

        /* システムプロパティの取得 */
        Properties prop = System.getProperties();

        prop.put("user.sslenvfile",                sslenvfile); 
        prop.put("user.ssllogdir",                 ssllogdir );

        try 
        {
                /* リポジトリサーバに接続 */
                DirContext ctx = new InitialDirContext(env);

                /* 検索範囲の指定 */
                SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

                /* 
                 * 検索開始位置:ou=interstage,o=fujitsu,dc=com、検索フィルタ:cn=User001
                 * で検索実行
                 */
                NamingEnumeration results = ctx.search(s_base, filter, constraints);

                /* 検索結果の表示 */
                while (results != null && results.hasMore()) {
                        SearchResult si = (SearchResult)results.next();

                        /* エントリ名の出力 */
                        System.out.println("name: " + si.getName());

                        Attributes attrs = si.getAttributes();
                        if (attrs == null) {
                                System.out.println("No attributes");
                        } else {
                                /* 属性の出力 */
                                for (NamingEnumeration ae = attrs.getAll();
                                    ae.hasMoreElements(); ) {
                                        Attribute attr = (Attribute)ae.next();
                                        String attrId = attr.getID();

                                        /* 属性値の出力 */
                                        for (Enumeration vals = attr.getAll();
                                            vals.hasMoreElements();
                                            System.out.println(attrId + ": " + vals.nextElement()));
                                }
                        }
                        System.out.println();
                }
                ctx.close();
        }
        catch(NamingException ne) 
        { 
                Throwable msg       = ne.getRootCause();
                String    msgStr    = null;
                int       ssl_error = -1;

                if ( msg != null ) {
                        /* エラーメッセージの取得 */
                        msgStr = msg.toString();
                        /*エラーを取得するキー検索 */
                        ssl_error = msgStr.indexOf("FjSSLSocket");
                }
                /* SSL用の処理 */
                if ( ssl_error != -1 ) {
                        int index1 = msgStr.indexOf("errtype=") + "errtype=".length();
                        if ( index1 != -1 ) {
                                /*エラータイプの取得 */
                                String error = msgStr.substring(index1, index1 + 2);
                                /*エラータイプの表示 */
                                System.out.println("SSL Error code : " + error);
                        }
                }
                System.out.println("Search example failed."); 
        } 
        catch(Exception e)
        {
                System.out.println(e.getMessage());
                System.out.println(e.getLocalizedMessage());
        }
}

}

/* Copyright (c) 2004 FUJITSU LIMITED
 * All Rights Reserved.
 *
 * エントリの検索を行う(SSL動作用)
 */ 

import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Properties;

import javax.naming.*;
import javax.naming.directory.*;
import com.sun.jndi.ldap.*;

class Search {

/*
 *  環境定義パラメタ
 *  (実行環境に合わせて以下のパラメタを変更する必要があります。)
 */
public static final String ldapurl     = "ldap://localhost:636/";
public static final String binddn      = "cn=manager,ou=interstage,o=fujitsu,dc=com";
public static final String password    = "secret";
public static final String sslenvfile  = "/conf/sslconfig.cfg";
public static final String ssllogdir   = "/log";
public static final String s_base      = "ou=interstage,o=fujitsu,dc=com";
public static final String filter      = "cn=User001";

public static void main(String[] args) {

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

        /* 環境プロパティの設定 */
        env.put(Context.PROVIDER_URL,              ldapurl   );
        env.put(Context.SECURITY_AUTHENTICATION,   "simple"  );
        env.put(Context.SECURITY_PRINCIPAL,        binddn    );
        env.put(Context.SECURITY_CREDENTIALS,      password  );
        /* SSL用の環境プロパティの設定 */
        env.put("java.naming.ldap.factory.socket", "com.fujitsu.ssl.FjSSLSocketFactory"); 
        env.put(Context.SECURITY_PROTOCOL,         "ssl"     );

        /* システムプロパティの取得 */
        Properties prop = System.getProperties();

        prop.put("user.sslenvfile",                sslenvfile); 
        prop.put("user.ssllogdir",                 ssllogdir );

        try 
        {
                /* リポジトリサーバに接続 */
                DirContext ctx = new InitialDirContext(env);

                /* 検索範囲の指定 */
                SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

                /* 
                 * 検索開始位置:ou=interstage,o=fujitsu,dc=com、検索フィルタ:cn=User001
                 * で検索実行
                 */
                NamingEnumeration results = ctx.search(s_base, filter, constraints);

                /* 検索結果の表示 */
                while (results != null && results.hasMore()) {
                        SearchResult si = (SearchResult)results.next();

                        /* エントリ名の出力 */
                        System.out.println("name: " + si.getName());

                        Attributes attrs = si.getAttributes();
                        if (attrs == null) {
                                System.out.println("No attributes");
                        } else {
                                /* 属性の出力 */
                                for (NamingEnumeration ae = attrs.getAll();
                                    ae.hasMoreElements(); ) {
                                        Attribute attr = (Attribute)ae.next();
                                        String attrId = attr.getID();

                                        /* 属性値の出力 */
                                        for (Enumeration vals = attr.getAll();
                                            vals.hasMoreElements();
                                            System.out.println(attrId + ": " + vals.nextElement()));
                                }
                        }
                        System.out.println();
                }
                ctx.close();
        }
        catch(NamingException ne) 
        { 
                Throwable msg       = ne.getRootCause();
                String    msgStr    = null;
                int       ssl_error = -1;

                if ( msg != null ) {
                        /* エラーメッセージの取得 */
                        msgStr = msg.toString();
                        /*エラーを取得するキー検索 */
                        ssl_error = msgStr.indexOf("FjSSLSocket");
                }
                /* SSL用の処理 */
                if ( ssl_error != -1 ) {
                        int index1 = msgStr.indexOf("errtype=") + "errtype=".length();
                        if ( index1 != -1 ) {
                                /*エラータイプの取得 */
                                String error = msgStr.substring(index1, index1 + 2);
                                /*エラータイプの表示 */
                                System.out.println("SSL Error code : " + error);
                        }
                }
                System.out.println("Search example failed."); 
        } 
        catch(Exception e)
        {
                System.out.println(e.getMessage());
                System.out.println(e.getLocalizedMessage());
        }
}

}

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005