この回答は少し遅れていますが、おそらく他のユーザーに役立つでしょう。EJPの回答に基づいています。
次のソリューションは、Apache Tomcat 7でテストされました。
必要に応じて、 に置き換えることができLdapContext
ますDirContext
。
ObjectFactory を作成する
ObjectFactory
をインスタンス化するために実装するクラスを作成しLdapContext
ます。
public class LdapContextFactory implements ObjectFactory {
public Object getObjectInstance(Object obj, Name name, Context nameCtx,
Hashtable<?, ?> environment) throws Exception {
Hashtable<Object, Object> env = new Hashtable<Object, Object>();
Reference reference = (Reference) obj;
Enumeration<RefAddr> references = reference.getAll();
while (references.hasMoreElements()) {
RefAddr address = references.nextElement();
String type = address.getType();
String content = (String) address.getContent();
switch (type) {
case Context.INITIAL_CONTEXT_FACTORY:
env.put(Context.INITIAL_CONTEXT_FACTORY, content);
break;
case Context.PROVIDER_URL:
env.put(Context.PROVIDER_URL, content);
break;
case Context.SECURITY_AUTHENTICATION:
env.put(Context.SECURITY_AUTHENTICATION, content);
break;
case Context.SECURITY_PRINCIPAL:
env.put(Context.SECURITY_PRINCIPAL, content);
break;
case Context.SECURITY_CREDENTIALS:
env.put(Context.SECURITY_CREDENTIALS, content);
break;
default:
break;
}
}
LdapContext context = new InitialLdapContext(env, null);
return context;
}
}
リソースを定義する
以下を に追加してcontext.xml
、ファクトリを参照し、値を定義してLdapContext
インスタンスを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<Context>
...
<Resource name="ldap/LdapResource" auth="Container"
type="javax.naming.ldap.LdapContext"
factory="com.company.LdapContextFactory"
singleton="false"
java.naming.factory.initial="com.sun.jndi.ldap.LdapCtxFactory"
java.naming.provider.url="ldap://127.0.0.1:389"
java.naming.security.authentication="simple"
java.naming.security.principal="username"
java.naming.security.credentials="password" />
</Context>
リソースにさらに属性/値を追加する必要がある場合は、ObjectFactory
上記で作成したものを更新して、これらの新しい属性/値を読み取ることを検討してください。
リソースを使用する
必要な場所にリソースを挿入します。
@Resource(name = "ldap/LdapResource")
private LdapContext bean;
または調べてください:
Context initialContext = new InitialContext();
LdapContext ldapContext = (LdapContext)
initialContext.lookup("java:comp/env/ldap/LdapResource");
続きを見る
Apache Tomcat のドキュメントでは、カスタム リソース ファクトリを追加する方法について説明しています。