尝试将应用程序从WebLogic 12.2.1迁移到Tomcat 8.5.4,Weblogic下的内容是作为LDAP连接的外部JNDI提供程序的条目已迁移到新的ResourceTomcat下.
遵循Stack Overflow上的建议,自定义LdapContextFactory已打包为jarTomcat lib文件夹下的新文件.
在Tomcat server.xml文件中,GlobalNamingResources/Resource已配置以下内容:
<Resource name="ldapConnection"
auth="Container"
type="javax.naming.ldap.LdapContext"
factory="com.sample.custom.LdapContextFactory"
singleton="false"
java.naming.referral="follow"
java.naming.factory.initial="com.sun.jndi.ldap.LdapCtxFactory"
java.naming.provider.url="ldap://some.host:389"
java.naming.security.authentication="simple"
java.naming.security.principal="CN=some,OU=some,OU=some,DC=some,DC=a,DC=b"
java.naming.security.credentials="password"
com.sun.jndi.ldap.connect.pool="true"
com.sun.jndi.ldap.connect.pool.maxsize="10"
com.sun.jndi.ldap.connect.pool.prefsize="4"
com.sun.jndi.ldap.connect.pool.timeout="30000" />
Run Code Online (Sandbox Code Playgroud)
通过嵌入在Eclipse中的Apache Directory Studio/LDAP Browser等LDAP浏览器浏览LDAP目录时,上述连接可正常工作.
习惯com.sample.custom.LdapContextFactory很简单:
public class LdapContextFactory implements ObjectFactory {
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment)
throws Exception {
Hashtable<Object, Object> env = new Hashtable<>();
Reference reference = (Reference) obj;
Enumeration<RefAddr> …Run Code Online (Sandbox Code Playgroud)