1. 概述
本教程,我们讲学习如何搭建Spring Security LDAP。
开始之前,先了解什么是LDAP。LDAP是“Lightweight Directory Access Protocol”的缩写(轻型目录访问协议),它是一个开放的,中立的,工业标准的应用协议,通过网络提供目录访问服务。
2. Maven依赖
首先添加所需maven依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>
我们使用ApacheDS 作为我们LDAP服务器,它是一个可扩展、嵌入式的目录服务器。
3. Java 配置
下面,我们通过Java代码方式配置Spring Security:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userSearchBase("ou=people")
.userSearchFilter("(uid={0})")
.groupSearchBase("ou=groups")
.groupSearchFilter("member={0}")
.contextSource()
.root("dc=baeldung,dc=com")
.ldif("classpath:users.ldif");
}
}
上面只展示了LDAP相关配置,完整配置请访问这里。
4. XML配置
等效的XML配置:
<authentication-manager>
<ldap-authentication-provider
user-search-base="ou=people"
user-search-filter="(uid={0})"
group-search-base="ou=groups"
group-search-filter="(member={0})">
</ldap-authentication-provider>
</authentication-manager>
<ldap-server root="dc=baeldung,dc=com" ldif="users.ldif"/>
同样,上面只展示了LDAP相关配置,完整XML配置请访问这里。
5. LDAP 数据交换格式
LDAP数据,使用LDIF(LDAP Data Interchange Format)数据交互格式表示,下面是我们user数据例子:
dn: ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: organizationalUnit
ou: groups
dn: ou=people,dc=baeldung,dc=com
objectclass: top
objectclass: organizationalUnit
ou: people
dn: uid=baeldung,ou=people,dc=baeldung,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Jim Beam
sn: Beam
uid: baeldung
userPassword: password
dn: cn=admin,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: admin
member: uid=baeldung,ou=people,dc=baeldung,dc=com
dn: cn=user,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: user
member: uid=baeldung,ou=people,dc=baeldung,dc=com
6. 应用
最后,这是我们一个简单的应用
@Controller
public class MyController {
@RequestMapping("/secure")
public String secure(Map<String, Object> model, Principal principal) {
model.put("title", "SECURE AREA");
model.put("message", "Only Authorized Users Can See This Page");
return "home";
}
}
7. 总结
本教程我们介绍了Spring Security LDAP,学习了如何配置和定义LDIF。
惯例,本文完整源代码可从GitHub上获取。