0
0

Javaで受信したLDAPデータをOracleDBに登録する方法

Last updated at Posted at 2024-06-01

受信したLDAP情報をOracleデータベースに格納するには、以下の手順に従います。まず、LDAPから情報を取得し、それをOracleデータベースに挿入します。

手順
①必要なライブラリを追加する:

  • JNDIライブラリ(Java SEに標準で含まれています)。
  • JDBCドライバ(Oracle用のJDBCドライバを追加する必要があります)。

②Oracleデータベースに接続する:

  • JDBCを使用してデータベースに接続します。

③LDAPから情報を取得する:

  • 前述の通り、JNDIを使用してLDAPから情報を取得します。

④取得した情報をOracleデータベースに挿入する:

  • JDBCを使用してデータベースに情報を挿入します。

コード例
以下に、LDAPから取得した情報をOracleデータベースに格納するためのJavaコード例を示します。

Java

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Hashtable;

public class LDAPToOracle {
    public static void main(String[] args) {
        /* LDAPサーバの接続情報を設定 */
        String ldapUrl = "ldap://localhost:389";
        String baseDn = "dc=example,dc=com";
        String userDn = "cn=admin,dc=example,dc=com";
        String password = "password";

        /* Oracleデータベースの接続情報を設定 */
        String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
        String dbUser = "dbuser";
        String dbPassword = "dbpassword";

        /* LDAP接続プロパティを設定 */
        Hashtable<String, String> 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, userDn);
        env.put(Context.SECURITY_CREDENTIALS, password);

        Connection conn = null;
        PreparedStatement pstmt = null;

        try {
            /* LDAP接続を確立 */
            DirContext ctx = new InitialDirContext(env);

            /* 検索クエリと検索コントロールを設定 */
            String searchFilter = "(objectClass=inetOrgPerson)";
            SearchControls searchControls = new SearchControls();
            searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

            /* 検索を実行 */
            NamingEnumeration<SearchResult> results = ctx.search(baseDn, searchFilter, searchControls);

            /* Oracleデータベースに接続 */
            conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
            String sql = "INSERT INTO users (cn, email) VALUES (?, ?)";
            pstmt = conn.prepareStatement(sql);

            /* 結果を処理してデータベースに挿入 */
            while (results.hasMore()) {
                SearchResult searchResult = results.next();
                Attributes attributes = searchResult.getAttributes();

                String cn = null;
                String email = null;

                Attribute attr = attributes.get("cn");
                if (attr != null) {
                    cn = (String) attr.get();
                }

                attr = attributes.get("mail");
                if (attr != null) {
                    email = (String) attr.get();
                }

                if (cn != null && email != null) {
                    pstmt.setString(1, cn);
                    pstmt.setString(2, email);
                    pstmt.executeUpdate();
                }
            }

            /* 接続をクローズ */
            ctx.close();
            pstmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

説明
①LDAP接続:

  • 前述のLDAP接続の設定と同様に行います。

②Oracleデータベース接続:

  • DriverManager.getConnectionを使用してOracleデータベースに接続します。
  • PreparedStatementを使用してSQL挿入文を準備します。

③データ挿入:

  • 取得したLDAP情報(CNとEmail)をOracleデータベースのusersテーブルに挿入します。
  • pstmt.setStringメソッドでSQLクエリのプレースホルダに値を設定し、pstmt.executeUpdateメソッドでデータベースに挿入します。

このコードを実行すると、LDAPサーバから取得したユーザーのCNとEmailがOracleデータベースのusersテーブルに格納されます。自分の環境に合わせて、LDAPサーバのURL、DN、パスワード、およびデータベースの接続情報を変更してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0