【发布时间】:2014-10-20 08:11:07
【问题描述】:
对于 Spring Boot 应用程序,我使用 注释 成功配置了 Spring LdapTemplate,包括来自 application.properties 的 LdapContextSource 依赖项和 @Values。 (Woot!我找不到示例,所以也许这对其他人有帮助。)
sn-ps(如下)设置上下文源,将其注入LdapTemplate,然后将其自动连接到我的 DirectoryService。
有没有更好/更简洁的方法在 Spring Boot 应用中设置 ContextSource?
application.properties(在类路径上):
ldap.url=ldap://server.domain.com:389
ldap.base:OU=Employees,OU=Users,DC=domain,DC=com
ldap.username:CN=myuserid,OU=employees,OU=Users,DC=domain,DC=com
ldap.password:secretthingy
MyLdapContextSource.java:
@Component
public class MyLdapContextSource extends LdapContextSource implements ContextSource {
@Value("${ldap.url}")
@Override
public void setUrl(String url) { super.setUrl(url); }
@Value("${ldap.base}")
@Override
public void setBase(String base) {super.setBase(base); }
@Value("${ldap.username}")
@Override
public void setUserDn(String userDn) {super.setUserDn(userDn); }
@Value("${ldap.password}")
@Override
public void setPassword(String password) { super.setPassword(password); }
}
MyLdapTemplate.java:
@Component
public class MyLdapTemplate extends LdapTemplate {
@Autowired
public MyLdapTemplate(ContextSource contextSource) { super(contextSource); }
}
DirectoryService.java:
@Service
public class DirectoryService {
private final LdapTemplate ldapTemplate;
@Value("${ldap.base}")
private String BASE_DN;
@Autowired
public DirectoryService(LdapTemplate ldapTemplate) { this.ldapTemplate = ldapTemplate; }
public Person lookupPerson(String username) {
return (Person) ldapTemplate.lookup("cn=" + username, new PersonAttributesMapper());
}
public List<Person> searchDirectory(String searchterm) {
SearchControls searchControls = new SearchControls();
searchControls.setCountLimit(25);
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
List<Person> people = (List<Person>) ldapTemplate.search(
BASE_DN, "cn=" + searchterm, searchControls, new PersonAttributesMapper());
return people;
}
}
【问题讨论】:
-
为什么?为什么要进行所有子类化?为什么不简单地在 xml 或 java config 中配置它们?仅配置的子类化对我来说似乎有点过分......
-
谢谢你的建议,M! (也就是说,显然“为什么”的答案是我正在学习的 b/c 并且它有效,但这就是为什么我把它拿出来进行审查并提出更好/更清洁方式的建议。一个更友好的方式可能有一直以来,“为了更好/更清洁的方法,请使用 @Configuration 和方法创建一个配置类,这些方法返回您需要使用 Environment 来访问 Spring Boot 属性而不是 @Value 的 bean 类型。”——我会尝试代码并报告。
标签: java spring-boot annotations spring-ldap