2014-11-06 27 views
9

Şu anda Spring Boot'u kullanarak yeni bir web uygulaması oluşturuyorum ve Spring Security'i kimlik doğrulaması için entegre etme sürecini başlattım. Spring Boot tabanlı LDAP tutorial'u başarıyla uyguladıktan sonra, JavaConfig tabanlı yapılandırmamı Active Directory örneğime yönlendirmek istedim. beklendiği gibiSpring Security ve JavaConfig ile doğrulanırken PartialResultException

başvurum şimdi kötü kimlik bilgilerini işleme, ancak geçerli kimlik bilgileri şimdi

javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name '' 

Bu yaygın bir sorundur neden - Bu sorun karşılaşıldı bir numberofplaces vardır. Çözüm, "follow" için Context.REFERRAL ayarını yapıyor gibi görünüyor, ancak JavaConfig kullanarak bu seçeneğin nasıl ayarlanacağını gösteren bir belge bulamıyorum. Tek seçenekim burada XML tabanlı bir yapılandırmaya dönmek mi? Spring'in geliştiricileri JavaConfig'e doğru itmesi gibi görünüyor, bu yüzden mümkünse iki yaklaşımı karıştırmaktan kaçınmak istiyorum.

aşağıdaki

benim güvenlik yapılandırması: Ben (uygun bir setReferral yöntemi olduğundan) bunu gerçekleştirmek için LdapContextSource bir örneğini kullanmanız gerekir his vardı

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers("/css/**").permitAll().anyRequest() 
       .fullyAuthenticated().and().formLogin(); 
    } 

    @Configuration 
    protected static class AuthenticationConfiguration extends 
      GlobalAuthenticationConfigurerAdapter { 

     @Override 
     public void init(AuthenticationManagerBuilder auth) throws Exception { 
      auth.ldapAuthentication() 
       .userSearchBase("") 
       .userSearchFilter("(&(cn={0}))").contextSource() 
       .managerDn("<username>") 
       .managerPassword("<password>") 
       .url("ldap://<url>"); 
     } 
    } 
} 

cevap

13

, ama mücadele detaylarla biraz. Spring.io üzerinde bir forum post, devam etmem için bana yeterli verdi, ve şimdi çalışmakta olan şeyler var gibi görünüyor. Ben burada ne aradığımı ile herhangi bir önemli kusurları varsa

benim için açık değil, ama o kadar umarım bu gelecekte başkasına yararlı olacaktır, iş gibi görünüyor:

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers("/css/**").permitAll().anyRequest() 
       .fullyAuthenticated().and().formLogin(); 
    } 

    @Configuration 
    protected static class AuthenticationConfiguration extends 
      GlobalAuthenticationConfigurerAdapter { 

     @Override 
     public void init(AuthenticationManagerBuilder auth) throws Exception {    
      DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource("ldap://<url>"); 
      contextSource.setUserDn("<username>"); 
      contextSource.setPassword("<password>"); 
      contextSource.setReferral("follow"); 
      contextSource.afterPropertiesSet(); 

      LdapAuthenticationProviderConfigurer<AuthenticationManagerBuilder> ldapAuthenticationProviderConfigurer = auth.ldapAuthentication(); 

      ldapAuthenticationProviderConfigurer 
       .userSearchFilter("(&(cn={0}))") 
       .userSearchBase("") 
       .contextSource(contextSource); 
     } 
    } 
} 
İlgili konular