我有一个LDAP服务器,用于对Tomcat Web应用程序中的用户进行身份验证。我正在使用JNDIRealm,并将其配置在上下文文件中,这非常有效。
我还需要搜索LDAP以获取用户信息。我已经通过创建自己的JNDI上下文并使用哈希表来完成了“jndi方法”的操作,而且在Tomcat之外也可以正常工作。但是,我不想在代码中配置JNDI属性,而是希望在我的上下文文件中创建一个JNDI资源,就像Realm配置旁边一样。
我认为我会这样做:
我还需要搜索LDAP以获取用户信息。我已经通过创建自己的JNDI上下文并使用哈希表来完成了“jndi方法”的操作,而且在Tomcat之外也可以正常工作。但是,我不想在代码中配置JNDI属性,而是希望在我的上下文文件中创建一个JNDI资源,就像Realm配置旁边一样。
我认为我会这样做:
<Resource
name="ldap"
auth="Container"
type="com.sun.jndi.ldap.LdapCtxFactory"
java.naming.factory.initial="com.sun.jndi.ldap.LdapCtxFactory"
java.naming.provider.url="ldap://localhost:389"
java.naming.security.authentication="simple"
java.naming.security.principal="uid=rjcarr,dc=example"
java.naming.security.credentials="abc123"
/>
但是无论是Tomcat告诉我资源无法创建,还是当我试图用类似以下方式初始化它时:
Context initctx = new InitialContext();
DirContext ctx = (DirContext) initctx.lookup("java:comp/env/ldap");
Tomcat告诉我:“无法创建资源实例”。我已经在web.xml文件中添加了正确的resource-ref,所以我认为那不是问题所在。
由于LDAP与JNDI方法一起使用,因此我假设它应该能够配置为资源,对吧?我错过了什么吗?