Spring注解@ Entry.base不支持SpEL
我使用Spring Data LDAP,并且Spring Boot为嵌入式UnboundID服务器提供了开箱即用的支持。但是,当我使用Spring Data
LDAP的@Entry
注释时,我需要base
根据使用的是嵌入式UnboundID LDAP服务器还是远程Active
Directory服务器,在注释中指定其他内容。
我正在尝试通过指定以下内容来使用SpEL和基于配置文件的属性:
@Entry(base = "${ldap.person.base}", ...)
然后我有一个application.propreties
with ldap.person.base=OU=AD Person
Base和一个application-embedded.properties
with ldap.person.base=OU=Embedded
Person Base。
但是,@Entry
注释似乎不支持SpEL评估:
javax.naming.InvalidNameException:无效名称:$ {ldap.person.base}
Spring LDAP中有一个开放的问题来添加对此的支持,但是在Spring LDAP中支持它之前,是否有任何解决方法或其他方法可以实现此目的?
回答:
原来我之所以需要与众不同的原因base
是因为Spring并未在base
上设置ContextSource
。
当您让Spring
Boot自动配置嵌入式LDAP服务器时,它将在中创建一个ContextSource
这样的目录EmbeddedLdapAutoConfiguration
:
@Bean@DependsOn("directoryServer")
@ConditionalOnMissingBean
public ContextSource ldapContextSource() {
LdapContextSource source = new LdapContextSource();
if (hasCredentials(this.embeddedProperties.getCredential())) {
source.setUserDn(this.embeddedProperties.getCredential().getUsername());
source.setPassword(this.embeddedProperties.getCredential().getPassword());
}
source.setUrls(this.properties.determineUrls(this.environment));
return source;
}
如您所见,它在那里没有调用source.setBase()
。因此,为解决此问题,我添加了一个配置文件,@Profile("embedded")
并手动创建了一个ContextSource
我base
自己设置的位置(我省略了凭据部分,因为我不对嵌入式服务器使用凭据):
@Configuration@Profile("embedded")
@EnableConfigurationProperties({ LdapProperties.class })
public class EmbeddedLdapConfig {
private final Environment environment;
private final LdapProperties properties;
public EmbeddedLdapConfig(final Environment environment, final LdapProperties properties) {
this.environment = environment;
this.properties = properties;
}
@Bean
@DependsOn("directoryServer")
public ContextSource ldapContextSource() {
final LdapContextSource source = new LdapContextSource();
source.setUrls(this.properties.determineUrls(this.environment));
source.setBase(this.properties.getBase());
return source;
}
}
现在,对于Active
Directory服务器和嵌入式UnboundID服务器,我可以将base
属性值保留在@Entry
相同的位置,并且它可以正常工作。
以上是 Spring注解@ Entry.base不支持SpEL 的全部内容, 来源链接: utcz.com/qa/427815.html