2015-02-11 77 views
0

在我的Web应用程序中,我必须使用Spring Security并使用LDAP获取用户的认证详细信息,并使用JDBC获取用户的授权详细信息。用户提交表单并从中获取用户名和密码。如何为LDAP和JDBC配置Spring?

  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

如果你什么authentificate agains LDAP和Autorize(得到JDBC用户角色),你应该实现LdapAuthoritiesPopulator在。

​​

,并把它添加到您的SecurityConfig

public class SecurityConfig extends WebSecurityConfigurerAdapter { 

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

所有类似的用户通过LDAP authentificated将自动获得 “ROLE_ADMIN”。