我有一个原型spring应用程序,可以使用spring-security和LDAP。该应用程序适用于内部LDAP服务器。但是当我想用xml-config定义一个单独的连接时,它不起作用。更具体:应该由xml-config实例化的LdapTemplate保留一个空对象。这是代码:
public class UserRepo {
@Autowired
private LdapTemplate ldapTemplate; //stays null
public static final String BASE_DN = "dc=springframework,dc=org";
//this works, but is not desired:
public UserRepo() {
// final GenericXmlApplicationContext appContext = new GenericXmlApplicationContext("classpath:ldap.xml");
// appContext.refresh();
// ldapTemplate = (LdapTemplate)appContext.getBean(LdapTemplate.class);
// LdapContextSource lcs = new LdapContextSource();
// lcs.setUrl("ldap://127.0.0.1:389/");
// lcs.setUserDn(BASE_DN);
// lcs.setDirObjectFactory(DefaultDirObjectFactory.class);
// lcs.setAnonymousReadOnly(true);
// lcs.afterPropertiesSet();
// ldapTemplate = new LdapTemplate(lcs);
}
我的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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 http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/ldap http://www.springframework.org/schema/ldap/spring-ldap.xsd">
<ldap:context-source
id="contextSource"
url="ldap://localhost:389"
base="dc=example,dc=com"
username="cn=Manager"
password="secret" />
<ldap:ldap-template id="ldapTemplate" />
<bean id="userRepo" class="user.UserRepo">
<property name="ldapTemplate" ref="ldapTemplate" />
</bean>
</beans>
我已将ldap.xml一次放在src-dir中,另一次放在ressource-dir中,两者都不起作用。
我希望你能告诉我我做错了什么。
答案 0 :(得分:0)
将@Component注释添加到UserRepo类和正确的注释配置(或组件扫描元素,如果需要)。由于您的注释掉的代码可以正常工作,因此您可以成功创建LdapTemplate bean,并因为使用GenericXmlApplicationContext而注入。要使用注释对其进行测试,您需要使用AnnotationConfigApplicationContext。