Ldap学習日記-Ldap接続
4335 ワード
ldapsdk.jarを使用してLdapサーバipnaletに接続する手順は、次のとおりです.
1.接続プールを取得する.
Ldapsdkは接続プールクラスConnectionPoolを提供し、構造関数によって接続プールを構築することができる.明らかに、この動作はsingletonにカプセル化されるべきである.
パラメータの意味は明らかで、1番目は接続プールの最小接続数を定義し、2番目のパラメータは接続プールの最大接続数を定義し、3番目のパラメータは接続するLdapホストアドレスを指定し、4番目のパラメータはポートである.
2.接続を取得して閉じる.
接続はConnectionPoolが提供するgetConnection()メソッドで取得できますが、最後にclose(LDAPConnection)メソッドを呼び出して接続プールに戻す必要があります.そうしないと、接続が漏れる危険があります.
3.接続と検証
ldapサーバに接続するにはアカウントが必要です.このアカウントはConnection.authenticate(String dn,String password)によって指定されます.つまり、このようなコードを使用して検証し、接続する必要があります.
4.検証済みのConnectionオブジェクトを使用して、関連操作を行うことができます.操作に使用するアカウントがldapであると仮定します.connection、パスワードはpasswordで、完全なコードは以下の通りです.
5.もちろん、接続プールではなく、単一の接続を直接指定することもできます.
このような単一の接続を使用するメリットは、複数のサーバを一度に指定できることです.これにより、接続時に1つのサーバに正常に接続されるまで、1つのサーバを1つずつ試してみることができます.
ここで、各サーバは「サーバ名:ポート名」のフォーマットに一致し、サーバ間はスペースで区切らなければなりません.各サーバは独自のポートを指定できますが、最後にデフォルトのポートパラメータが必要です.あるサーバがポートを指定せずにサーバ名のみを指定した場合、接続は指定したデフォルトポートを使用して接続しようとします.
1.接続プールを取得する.
Ldapsdkは接続プールクラスConnectionPoolを提供し、構造関数によって接続プールを構築することができる.明らかに、この動作はsingletonにカプセル化されるべきである.
ConnectionPool = new ConnectionPool(MIN_CONN_SIZE, MAX_CONN_SIZE, HOST, PORT)
パラメータの意味は明らかで、1番目は接続プールの最小接続数を定義し、2番目のパラメータは接続プールの最大接続数を定義し、3番目のパラメータは接続するLdapホストアドレスを指定し、4番目のパラメータはポートである.
2.接続を取得して閉じる.
接続はConnectionPoolが提供するgetConnection()メソッドで取得できますが、最後にclose(LDAPConnection)メソッドを呼び出して接続プールに戻す必要があります.そうしないと、接続が漏れる危険があります.
3.接続と検証
ldapサーバに接続するにはアカウントが必要です.このアカウントはConnection.authenticate(String dn,String password)によって指定されます.つまり、このようなコードを使用して検証し、接続する必要があります.
String dn = “uid=Frederick, ou=users, o=frederick.iteye.com”;
String password = “password”;
Connection.authenticate(dn, password);
4.検証済みのConnectionオブジェクトを使用して、関連操作を行うことができます.操作に使用するアカウントがldapであると仮定します.connection、パスワードはpasswordで、完全なコードは以下の通りです.
import netscape.ldap.LDAPConnection;
import netscape.ldap.LDAPException;
import netscape.ldap.util.ConnectionPool;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import fred.envoy.exception.util.LdapUtilsException;
public class LdapUtils {
private static final Log log = LogFactory.getLog(LdapUtils.class);
private static final String HOST = "frederick.iteye.com";
private static final int PORT = 10389;
private static final int MIN_CONN_SIZE = 1;
private static final int MAX_CONN_SIZE = 5;
private static final String USER_ID = "ldap_connection";
private static final String PASSWORD = "password";
private static final ConnectionPool connPool;
static {
try {
connPool = new ConnectionPool(MIN_CONN_SIZE, MAX_CONN_SIZE, HOST, PORT);
} catch (LDAPException e) {
String message = "Failed to init Ldap connection pool";
if (log.isErrorEnabled()) {
log.error(message, e);
}
throw new LdapUtilsException(message, e);
}
}
public static ConnectionPool getConnectionPool() {
return LdapUtils.connPool;
}
public static LDAPConnection getConnection() {
LDAPConnection conn = LdapUtils.getConnectionPool().getConnection();
try {
conn.authenticate(LdapUtils.getDnForUser(USER_ID), PASSWORD);
} catch (LDAPException e) {
String message = "Failed to authen the system ldap user";
if (log.isErrorEnabled()) {
log.error(message, e);
}
throw new LdapUtilsException(message, e);
}
return conn;
}
public static void closeConnection(LDAPConnection conn) {
LdapUtils.getConnectionPool().close(conn);
}
public static String getDnForUser(String userId) {
return new StringBuffer()
.append("uid=").append(userId).append(",")
.append("ou=users,o=frederick.iteye.com")
.toString();
}
}
5.もちろん、接続プールではなく、単一の接続を直接指定することもできます.
LDAPConnection conn = new LDAPConnection();
try {
conn.connect(HOST, PORT);
} catch (LDAPException e1) {
throw new RuntimeException(e);
}
このような単一の接続を使用するメリットは、複数のサーバを一度に指定できることです.これにより、接続時に1つのサーバに正常に接続されるまで、1つのサーバを1つずつ試してみることができます.
LDAPConnection conn = new LDAPConnection();
try {
conn.connect("host1:port1 host2:port2 hostn:portn", LDAPv3.DEFAULT_PORT);
} catch (LDAPException e1) {
throw new RuntimeException(e);
}
ここで、各サーバは「サーバ名:ポート名」のフォーマットに一致し、サーバ間はスペースで区切らなければなりません.各サーバは独自のポートを指定できますが、最後にデフォルトのポートパラメータが必要です.あるサーバがポートを指定せずにサーバ名のみを指定した場合、接続は指定したデフォルトポートを使用して接続しようとします.