アプリケーションの LDAP 認証を行う必要があります。
次のプログラムを試しました。
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class LdapContextCreation {
public static void main(String[] args) {
LdapContextCreation ldapContxCrtn = new LdapContextCreation();
LdapContext ctx = ldapContxCrtn.getLdapContext();
}
public LdapContext getLdapContext(){
LdapContext ctx = null;
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "Simple");
//it can be <domain\\userid> something that you use for windows login
//it can also be
env.put(Context.SECURITY_PRINCIPAL, "username@domain.com");
env.put(Context.SECURITY_CREDENTIALS, "password");
//in following property we specify ldap protocol and connection url.
//generally the port is 389
env.put(Context.PROVIDER_URL, "ldap://server.domain.com");
ctx = new InitialLdapContext(env, null);
System.out.println("Connection Successful.");
}catch(NamingException nex){
System.out.println("LDAP Connection: FAILED");
nex.printStackTrace();
}
return ctx;
}
}
次の例外を取得:
LDAP 接続: 失敗しました javax.naming.AuthenticationException: [LDAP: エラーコード 49 - 無効な資格情報] com.sun.jndi.ldap.LdapCtx.mapErrorCode (LdapCtx.java:3053) で com.sun.jndi.ldap.LdapCtx.processReturnCode (LdapCtx.java:2999) で com.sun.jndi.ldap.LdapCtx.processReturnCode (LdapCtx.java:2801) で com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2715) で com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:305) で com.sun.jndi.ldap.LdapCtxFactory.getUsingURL (LdapCtxFactory.java:187) で com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:205) で com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance (LdapCtxFactory.java:148) で com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:78) で javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:235)で javax.naming.InitialContext.initializeDefaultInitCtx(InitialContext.java:318)で javax.naming.InitialContext.getDefaultInitCtx (InitialContext.java:348) で javax.naming.InitialContext.internalInit(InitialContext.java:286) で javax.naming.InitialContext.init(InitialContext.java:308) で javax.naming.ldap.InitialLdapContext.(InitialLdapContext.java:99) で LdapContextCreation.getLdapContext(LdapContextCreation.java:27) で LdapContextCreation.main (LdapContextCreation.java:12) で
考慮すべき点がいくつかあります。
以前は使用して
tomcat 5.3.5
いましたが、Tomcat 6 のみがサポートしていると誰かに言われたので、ダウンロードtomcat 6.0.35
して現在このバージョンのみを使用しています。server.xml
次のコードを構成して追加しました-<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" connectionURL="ldap://server.domain.com:389/" userPattern="{0}" />
から次のコードにコメントしました
server.xml
-<!-- Commenting for LDAP <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> -->
記事のステップ 2 と 3
認証を実行するために tomcat にコピーする必要がある jar ファイルがいくつかあると誰かが提案しましたが、
ldap
それは私がする必要がありますか? そして、どのjar
ファイルですか?また、確かに正しい資格情報を使用していますが、この問題の原因は何ですか?
間違った属性を使用している場合に、LDAP の正しい属性を特定する方法はありますか?