受信した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、パスワード、およびデータベースの接続情報を変更してください。