Ich versuche eine Spring-Rest-Anwendung zu erstellen, um Werte zurückzugeben, die von zwei verschiedenen ldap-Verzeichnisservern stammen können. Ist dies möglich mit Feder ldap Repositories? Ist es möglich, mehr als ein ldaptemplate und eine Kontextsource zu erstellen, um beide Verzeichnisse abfragen zu können?Kann ein Spring ldap repository-Projekt auf zwei verschiedene ldap-Verzeichnisse zugreifen?
0
A
Antwort
0
Sie können getrennte Beams ldapTemplate
und contextSource
für jedes LDAP-Verzeichnis konfigurieren.
Sie können auf die folgende Grundkonfiguration (JavaConfig) zugreifen;
@Configuration
@EnableLdapRepositories(basePackages = "com.foo.ldap1.repositories", ldapTemplateRef="ldapTemplate1")
public class Ldap1Configuration {
@Autowired
Environment env;
@Bean
public LdapContextSource contextSource1() {
LdapContextSource contextSource= new LdapContextSource();
contextSource.setUrl(env.getRequiredProperty("ldap1.url"));
contextSource.setBase(env.getRequiredProperty("ldap1.base"));
contextSource.setUserDn(env.getRequiredProperty("ldap1.user"));
contextSource.setPassword(env.getRequiredProperty("ldap1.password"));
return contextSource;
}
@Bean(name="ldapTemplate1")
public LdapTemplate ldapTemplate1() {
return new LdapTemplate(contextSource1());
}
}
@Configuration
@EnableLdapRepositories(basePackages = "com.foo.ldap2.repositories", ldapTemplateRef="ldapTemplate2")
public class Ldap2Configuration {
@Bean
public LdapContextSource contextSource2() {
LdapContextSource contextSource= new LdapContextSource();
contextSource.setUrl(env.getRequiredProperty("ldap2.url"));
contextSource.setBase(env.getRequiredProperty("ldap2.base"));
contextSource.setUserDn(env.getRequiredProperty("ldap2.user"));
contextSource.setPassword(env.getRequiredProperty("ldap2.password"));
return contextSource;
}
@Bean(name="ldapTemplate2")
public LdapTemplate ldapTemplate2() {
return new LdapTemplate(contextSource2());
}
}
Dann können Sie für jede Instanz in der Anwendung beziehen sich pro folgenden;
@Autowired
@Qualifier("ldapTemplate1")
private LdapTemplate ldapTemplate1;
@Autowired
@Qualifier("ldapTemplate2")
private LdapTemplate ldapTemplate2;
Exkurs; Wenn die Anzahl der LDAP-Verzeichnisse zunimmt, ist es besser, eine ldaptemplate
Factory zu implementieren, die Verbindungsdetails übernimmt und ldaptemplate
Instanzen zurückgibt (example).
Ich hatte dies versucht, konnte aber nicht herausfinden, wie ich jedes ldapTemplate mit einem ldap-Repository verbinden würde. Ich verwende die Annotation @EnableRepositories für meine LdapConfiguration-Klasse. Ich brauche verschiedene ldap-Repository-Klassen für meine verschiedenen ldap-Verzeichnisse. –
Sie können die Eigenschaft 'ldapTemplateRef' von' @ EnableLdapRepositories' festlegen, um den Namen der zu verwendenden 'ldaptemplate' Bean zu konfigurieren. In Ihrem Fall sollten Sie separate Konfigurationsklassen mit separaten @ EnableLdapRepositories-Annotationen für Ihre LDAP-Verzeichnisse konfigurieren. –