1. 개요
2. 메이븐 의존성
<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>
참고:
를 확장 가능하고 포함 가능한 디렉토리 서버인 LDAP 서버로 사용했습니다.
3. 자바 설정
public class SecurityConfig {
@Bean
ApacheDSContainer ldapContainer() throws Exception {
return new ApacheDSContainer("dc=baeldung,dc=com", "classpath:users.ldif");
}
@Bean
LdapAuthoritiesPopulator authorities(BaseLdapPathContextSource contextSource) {
String groupSearchBase = "ou=groups";
DefaultLdapAuthoritiesPopulator authorities = new DefaultLdapAuthoritiesPopulator
(contextSource, groupSearchBase);
authorities.setGroupSearchFilter("(member={0})");
return authorities;
}
@Bean
AuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource,
LdapAuthoritiesPopulator authorities) {
LdapBindAuthenticationManagerFactory factory = new LdapBindAuthenticationManagerFactory
(contextSource);
factory.setUserSearchBase("ou=people");
factory.setUserSearchFilter("(uid={0})");
return factory.createAuthenticationManager();
}
}
이것은 물론 구성의 LDAP 관련 부분일 뿐입니다. 전체 Java 구성은
에서 찾을 수 있습니다 .
4. 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 데이터 교환 형식
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. 스프링 부트 사용하기
Spring Boot 프로젝트에서 작업할 때 LdapContextSource 및 LdapTemplate 을 자동으로 계측 하는 Spring Boot Starter Data Ldap 의존성을 사용할 수도 있습니다 .
spring-boot-starter-data-ldap
Starter 또는spring-ldap-core
가 있는지 확인해야 합니다 .<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
LDAP에 연결하려면 application.properties에 연결 설정을 제공해야 합니다.
spring.ldap.url=ldap://localhost:18889
spring.ldap.base=dc=example,dc=com
spring.ldap.username=uid=admin,ou=system
spring.ldap.password=secret
Spring Data LDAP 자동 구성에 대한 자세한 내용은
에서 찾을 수 있습니다 . Spring Boot는 필요한 서비스 클래스에 주입할 수 있는 LdapTemplate 의 계측을 처리하는
LdapAutoConfiguration 을 가져옵니다.
@Autowired
private LdapTemplate ldapTemplate;
7. Application
@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";
}
}
8. 결론
Eclipse
프로젝트이므로 가져오기 및 그대로 실행하기 쉬워야 합니다.