我正在编写一个使用LDAP的Spring应用程序。这是我的bean文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="xxxxx:xxx" />
<property name="base" value="ou=xxxxx,dc=xxxxxxx,dc=xxxxxx" />
<property name="userDn" value="uid=xxxxxxx" />
<property name="password" value="xxxxxxxx" />
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSource" />
</bean>
<bean id="helloLdap" class="a.b.c.HelloLdap">
<property name="ldapTemplate" ref="ldapTemplate" />
</bean>
</beans>
这是我的bean创建代码:
ApplicationContext fac = new ClassPathXmlApplicationContext(
"a/b/c/ldap.xml");
HelloLdap hello = (HelloLdap) fac.getBean("helloLdap");
这是我的错误消息:
线程“main”中的异常org.springframework.beans.factory.BeanCreationException:在类路径资源[xxxxxxxxxxxx]中定义名称为“contextSource”的bean创建时出错:设置属性值时出错;嵌套异常是org.springframework.beans.PropertyBatchUpdateException;嵌套的PropertyAccessExceptions(1)是: PropertyAccessException 1:org.springframework.beans.MethodInvocationException:Property'base'抛出异常;嵌套异常是java.lang.NoClassDefFoundError:org / apache / commons / lang / StringUtils
所以它说(最重要的)
"Property 'base' threw exception".
我想知道这是否是因为身份验证需要StartTLS。我没有在我的beans文件中的任何地方指示StartTLS身份验证,因此可能导致错误。尽管如此,我还是希望在创建bean之后 发生身份验证,而不是在创建时。
有谁知道这是否是原因(StartTLS authenticaton)?如果没有,任何想法我在XML中做错了什么?
谢谢, KTM
答案 0 :(得分:5)
答案在错误消息中:
java.lang.NoClassDefFoundError:org / apache / commons / lang / StringUtils
应用程序中的某些内容需要Apache Commons Lang。下载它,将其添加到您的类路径。
答案 1 :(得分:0)
我遇到了同样的问题,最终找到了 this
配置 Spring LDAP 的推荐方式是使用自定义 XML 配置命名空间。要使其可用,您需要在 bean 文件中包含 Spring LDAP 命名空间声明
注意下面这两行:xmlns:ldap="http://www.springframework.org/schema/ldap"
和 http://www.springframework.org/schema/ldap https://www.springframework.org/schema/ldap/spring-ldap.xsd"
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ldap="http://www.springframework.org/schema/ldap"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/ldap https://www.springframework.org/schema/ldap/spring-ldap.xsd">
然后你可以声明contextSource:
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="xxxxx:xxx" />
<property name="base" value="ou=xxxxx,dc=xxxxxxx,dc=xxxxxx" />
<property name="userDn" value="uid=xxxxxxx" />
<property name="password" value="xxxxxxxx" />
</bean>