springboot集成ldap
时间: 2023-07-03 11:26:48 浏览: 159
Spring Boot 连接LDAP的方法
在 Spring Boot 中,可以使用 Spring LDAP 来实现 LDAP 认证。具体步骤如下:
1. 配置 pom.xml,引入 Spring LDAP 相关依赖:
```xml
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
<version>${spring-ldap.version}</version>
</dependency>
```
2. 配置 application.yml,设置 LDAP 连接信息:
```yaml
spring:
ldap:
urls: ldap://localhost:389
base: dc=my-domain,dc=com
username: cn=Manager,dc=my-domain,dc=com
password: password
```
3. 实现 LdapUserDetailsMapper,将 LDAP 用户信息映射为 Spring Security User 对象:
```java
@Component
public class LdapUserDetailsMapper implements UserDetailsContextMapper {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username,
Collection<? extends GrantedAuthority> authorities) {
String password = (String) ctx.getObjectAttribute("userPassword");
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
for (GrantedAuthority authority : authorities) {
grantedAuthorities.add(new SimpleGrantedAuthority(authority.getAuthority()));
}
return new User(username, password, grantedAuthorities);
}
@Override
public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
```
这里将 LDAP 中的 "userPassword" 属性作为密码,LDAP 中的权限信息作为 Spring Security 的 GrantedAuthority 对象,最终将它们封装为一个 User 对象。
4. 配置 WebSecurityConfigurerAdapter,实现 LDAP 认证:
```java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private LdapUserDetailsMapper ldapUserDetailsMapper;
@Autowired
private Environment env;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout();
http.csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userSearchBase(env.getProperty("spring.ldap.user-search-base"))
.userSearchFilter(env.getProperty("spring.ldap.user-search-filter"))
.groupSearchBase(env.getProperty("spring.ldap.group-search-base"))
.groupSearchFilter(env.getProperty("spring.ldap.group-search-filter"))
.contextSource()
.url(env.getProperty("spring.ldap.urls"))
.managerDn(env.getProperty("spring.ldap.username"))
.managerPassword(env.getProperty("spring.ldap.password"))
.and()
.userDetailsContextMapper(ldapUserDetailsMapper);
}
}
```
这样就可以通过 LDAP 认证来控制访问权限了。在这个例子中,请求 "/admin/**" 的用户需要拥有 ADMIN 角色,请求 "/user/**" 的用户需要拥有 USER 角色,其他请求需要认证通过即可访问。
阅读全文