2015-02-11 3 views
0

В моем веб-приложении я должен использовать Spring Security и получать данные аутентификации пользователя, используя LDAP и данные авторизации пользователя, используя JDBC. Пользователь отправляет форму, и я получаю от нее имя пользователя и пароль.Как настроить Spring для LDAP и JDBC?

  1. Как получить имя пользователя и пароль в файле WebSecurityConfig?
  2. Как настроить авторизацию и аутентификацию?

Мои WebSecurityConfig:

@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().authenticated().and().formLogin() 
     .loginPage("/").permitAll(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) 
      throws Exception { 
     auth.ldapAuthentication().userDnPatterns("uid={0},ou=people") 
       .groupSearchBase("ou=groups").contextSource(contextSource()); 
    } 

    @Bean 
    public DefaultSpringSecurityContextSource contextSource() { 
     DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(
       "ldap://mjkoldc-03.red.com"); 
     contextSource.setUserDn("mj\\" + email); 
     contextSource.setPassword(password); 
     contextSource.setReferral("follow"); 
     contextSource.afterPropertiesSet(); 
     return contextSource; 

    } 
} 

Раньше я получал детали с помощью LDAPTemplate:

LdapQuery query = query().base("dc=metaljunction,dc=com") 
      .attributes("GivenName", "sn", "mail", "MobilePhone") 
      .where("ObjectClass").is("user").and("SamAccountName") 
      .is(email); 

ответ

1

Если вы что авторизуйтесь Agains LDAP и Autorize (получить роли пользователей из JDBC), вы должны выполнять LdapAuthoritiesPopulator.

public class CustomAuthoritiesPopulator implements LdapAuthoritiesPopulator { 

    @Override 
    public Collection<? extends GrantedAuthority> getGrantedAuthorities(DirContextOperations userData, String username) { 
     Collection<GrantedAuthority> gas = new HashSet<GrantedAuthority>(); 
     gas.add(new SimpleGrantedAuthority("ADMIN")); 
     return gas; 
    } 
} 

и добавить его в SecurityConfig

public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth   
      .ldapAuthentication() 
       .ldapAuthoritiesPopulator(new CustomAuthoritiesPopulator()) 
       .userSearchFilter("yourfilter")    
      .contextSource(contextSource());  
    } 
} 

Как этого все пользователи authentificated через LDAP автоматически получит "ROLE_ADMIN".

Смежные вопросы