如何为 LDAP 和 JDBC 配置 Spring?
Posted
技术标签:
【中文标题】如何为 LDAP 和 JDBC 配置 Spring?【英文标题】:How to configure Spring for LDAP and JDBC? 【发布时间】:2015-04-11 18:50:12 【问题描述】:在我的 Web 应用程序中,我必须使用 Spring Security 并使用 LDAP 获取用户的身份验证详细信息,并使用 JDBC 获取用户的授权详细信息。用户提交表单,我从中获取用户名和密码。
-
如何在我的
WebSecurityConfig
文件中获取用户名和密码?
如何配置授权和身份验证?
我的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】:如果您要再次验证 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());
这样,所有通过 LDAP 进行身份验证的用户都将自动获得“ROLE_ADMIN”。
【讨论】:
以上是关于如何为 LDAP 和 JDBC 配置 Spring?的主要内容,如果未能解决你的问题,请参考以下文章
Spring session jdbc - 如何为单个应用程序添加多个 HttpSessionIdResolver
如何为 DB2 的 JDBC 驱动程序配置 TCP keepAliveTimeout?