2017-05-04 16 views
5

Spring Data kullanıyorum LDAP ve Spring Boot, katıştırılmış bir UnboundID sunucusu için destek kutusunun dışında bir destek sunuyor. Ancak, Spring Data LDAP'ın @Entry ek açıklamasını kullandığımda, katıştırılmış UnboundID LDAP sunucusunu veya uzak bir Active Directory sunucusunu kullanıp kullanmadığımı temel alarak ek açıklamada farklı bir base belirtmem gerekir.SpEL, Spring ek açıklamasında desteklenmiyor @ Entry.base

Ben belirterek Spel ve profil bazlı özelliklere sahip Bunu yapmak için uğraş:

@Entry(base = "${ldap.person.base}", ...) 

Sonra ldap.person.base=OU=AD Person Base ile application.propreties ve ldap.person.base=OU=Embedded Person Base ile application-embedded.properties var.

javax.naming.InvalidNameException:

Ancak @Entry açıklama Spel değerlendirmesini desteklemek görünmüyor geçersiz ad: $ {ldap.person.base}

bir open issue vardır Bu konuda destek eklemek için Spring LDAP içinde, ancak Bahar LDAP'da desteklenene kadar bunu yapabileceğim bir çözüm veya başka bir yol var mı?

+0

https://github.com/spring-projects/spring-ldap/issues/444 –

+0

@PavanKumarJorrigala'da açık bir sorun var.Son zamanlarda bunu da buldum. –

cevap

1

Farklı bir base gereksinimine ihtiyacımın sebebi, ilk olarak'u ContextSource'a ayarlamamasıdır. Eğer izin verdiğinde

Bahar Boot o EmbeddedLdapAutoConfiguration olduğu gibi bir ContextSource yaratır, gömülü LDAP sunucusunu otomatik yapılandırır: Gördüğünüz gibi, orada yapar hiçbir yerinde bu source.setBase() çağrı

@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; 
} 

. Yani bu çözmek için, (Ben gömülü sunucu için kimlik bilgilerini kullanmayın çünkü kimlik kısmını çıkaran bırakın) @Profile("embedded") ile bir yapılandırma dosyası eklendi ve elle ben base kendim ayarlamak nerede ContextSource yarattı:

@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; 
    } 
} 

Şimdi, @Entrybase özniteliğinin değerini hem Active Directory sunucusu hem de katıştırılmış UnboundID sunucusu için aynı bırakabilir ve düzgün çalışır.

+0

Çalışırken iyi iş çıkardın! Lütfen, düzeltmek için önerdiğim yöntemi açıkça kullandığınızdan yanıtımı geri almayı düşünün. –

2

Burada izlediğimden emin değilim, ancak Spring Boot'da LDAP otomatik yapılandırmasını kullandığınızı varsayarak, spring.ldap.base özelliğini bir veya diğerine ayarlamak için yeterli değil (OU=AD Person Base veya OU=Embedded Person Base) kullandığınız profildeki

Hem EmbeddedLdapAutoConfiguration ve LdapAutoConfiguration onun base dahil, fasulye oluşturulması sırasında LdapContextSource çeşitli özelliklerini ayarlamak için bir LdapProperties nesnesini kullanın. Anlayabildiğim kadarıyla, LdapContextSource.base ayarlanmışsa, kod tabanınızda her bir @Entry için tanımlamanız gerekmeyecektir.

Otomatik yapılandırmayı kullanmıyorsanız ve varsayımlarımda hata varsa, kendi LdapContextSource fasulyenizi oluşturabilir ve base değerini Spring özelliğine dayalı olarak istediğiniz değere ayarlamanız gerekir.

+0

Bunu yaptığımda, yerleşik sürümde çalışır, ancak ben javax.naming.PartialResultException: İşlenmemiş Devam Referans (lar) ı alıyorum; Uygulama, Active Directory'ye karşı bir LDAP araması yaptığında kalan adı '/'. "Kişi" girdimde "base =" OU = Domain Users "ı belirtirsem çalışır, ancak bu gömülü sürümü bozar. –

İlgili konular