|
@@ -1,17 +1,24 @@
|
|
|
|
+/*
|
|
|
|
+ * Copyright 2002-2012 the original author or authors.
|
|
|
|
+ *
|
|
|
|
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
|
|
|
+ * the License. You may obtain a copy of the License at
|
|
|
|
+ *
|
|
|
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
+ *
|
|
|
|
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
|
|
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
|
|
+ * specific language governing permissions and limitations under the License.
|
|
|
|
+ */
|
|
package org.springframework.security.config.ldap;
|
|
package org.springframework.security.config.ldap;
|
|
|
|
|
|
import static org.junit.Assert.*;
|
|
import static org.junit.Assert.*;
|
|
-import static org.mockito.Mockito.mock;
|
|
|
|
|
|
+import static org.mockito.Mockito.*;
|
|
import static org.springframework.security.config.ldap.LdapUserServiceBeanDefinitionParser.*;
|
|
import static org.springframework.security.config.ldap.LdapUserServiceBeanDefinitionParser.*;
|
|
|
|
|
|
-import java.util.Set;
|
|
|
|
-
|
|
|
|
-import org.junit.After;
|
|
|
|
-import org.junit.Test;
|
|
|
|
-import org.springframework.security.config.ldap.LdapUserServiceBeanDefinitionParser;
|
|
|
|
|
|
+import org.junit.*;
|
|
import org.springframework.security.config.util.InMemoryXmlApplicationContext;
|
|
import org.springframework.security.config.util.InMemoryXmlApplicationContext;
|
|
import org.springframework.security.core.authority.AuthorityUtils;
|
|
import org.springframework.security.core.authority.AuthorityUtils;
|
|
-import org.springframework.security.core.authority.GrantedAuthorityImpl;
|
|
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
|
|
import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
|
|
@@ -24,8 +31,11 @@ import org.springframework.security.ldap.userdetails.Person;
|
|
import org.springframework.security.ldap.userdetails.PersonContextMapper;
|
|
import org.springframework.security.ldap.userdetails.PersonContextMapper;
|
|
import org.w3c.dom.Element;
|
|
import org.w3c.dom.Element;
|
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @author Luke Taylor
|
|
* @author Luke Taylor
|
|
|
|
+ * @author Rob Winch
|
|
*/
|
|
*/
|
|
public class LdapUserServiceBeanDefinitionParserTests {
|
|
public class LdapUserServiceBeanDefinitionParserTests {
|
|
private InMemoryXmlApplicationContext appCtx;
|
|
private InMemoryXmlApplicationContext appCtx;
|
|
@@ -50,12 +60,12 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void minimalConfigurationIsParsedOk() throws Exception {
|
|
public void minimalConfigurationIsParsedOk() throws Exception {
|
|
- setContext("<ldap-user-service user-search-filter='(uid={0})' /><ldap-server url='ldap://127.0.0.1:343/dc=springframework,dc=org' />");
|
|
|
|
|
|
+ setContext("<ldap-user-service user-search-filter='(uid={0})' /><ldap-server ldif='classpath:test-server.ldif' url='ldap://127.0.0.1:343/dc=springframework,dc=org' />");
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void userServiceReturnsExpectedData() throws Exception {
|
|
public void userServiceReturnsExpectedData() throws Exception {
|
|
- setContext("<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' group-search-filter='member={0}' /><ldap-server />");
|
|
|
|
|
|
+ setContext("<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' group-search-filter='member={0}' /><ldap-server ldif='classpath:test-server.ldif'/>");
|
|
|
|
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
@@ -70,7 +80,7 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
setContext("<ldap-user-service id='ldapUDS' " +
|
|
setContext("<ldap-user-service id='ldapUDS' " +
|
|
" user-search-base='ou=otherpeople' " +
|
|
" user-search-base='ou=otherpeople' " +
|
|
" user-search-filter='(cn={0})' " +
|
|
" user-search-filter='(cn={0})' " +
|
|
- " group-search-filter='member={0}' /><ldap-server />");
|
|
|
|
|
|
+ " group-search-filter='member={0}' /><ldap-server ldif='classpath:test-server.ldif'/>");
|
|
|
|
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetails joe = uds.loadUserByUsername("Joe Smeth");
|
|
UserDetails joe = uds.loadUserByUsername("Joe Smeth");
|
|
@@ -86,7 +96,7 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
" group-search-filter='member={0}' role-prefix='PREFIX_'/>" +
|
|
" group-search-filter='member={0}' role-prefix='PREFIX_'/>" +
|
|
"<ldap-user-service id='ldapUDSNoPrefix' " +
|
|
"<ldap-user-service id='ldapUDSNoPrefix' " +
|
|
" user-search-filter='(uid={0})' " +
|
|
" user-search-filter='(uid={0})' " +
|
|
- " group-search-filter='member={0}' role-prefix='none'/><ldap-server />");
|
|
|
|
|
|
+ " group-search-filter='member={0}' role-prefix='none'/><ldap-server ldif='classpath:test-server.ldif'/>");
|
|
|
|
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
@@ -101,21 +111,21 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void differentGroupRoleAttributeWorksAsExpected() throws Exception {
|
|
public void differentGroupRoleAttributeWorksAsExpected() throws Exception {
|
|
- setContext("<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' group-role-attribute='ou' group-search-filter='member={0}' /><ldap-server />");
|
|
|
|
|
|
+ setContext("<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' group-role-attribute='ou' group-search-filter='member={0}' /><ldap-server ldif='classpath:test-server.ldif'/>");
|
|
|
|
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
|
|
|
|
Set<String> authorities = AuthorityUtils.authorityListToSet(ben.getAuthorities());
|
|
Set<String> authorities = AuthorityUtils.authorityListToSet(ben.getAuthorities());
|
|
assertEquals(3, authorities.size());
|
|
assertEquals(3, authorities.size());
|
|
- assertTrue(authorities.contains(new GrantedAuthorityImpl("ROLE_DEVELOPER")));
|
|
|
|
|
|
+ assertTrue(authorities.contains("ROLE_DEVELOPER"));
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void isSupportedByAuthenticationProviderElement() {
|
|
public void isSupportedByAuthenticationProviderElement() {
|
|
setContext(
|
|
setContext(
|
|
- "<ldap-server url='ldap://127.0.0.1:343/dc=springframework,dc=org'/>" +
|
|
|
|
|
|
+ "<ldap-server url='ldap://127.0.0.1:343/dc=springframework,dc=org' ldif='classpath:test-server.ldif'/>" +
|
|
"<authentication-manager>" +
|
|
"<authentication-manager>" +
|
|
" <authentication-provider>" +
|
|
" <authentication-provider>" +
|
|
" <ldap-user-service user-search-filter='(uid={0})' />" +
|
|
" <ldap-user-service user-search-filter='(uid={0})' />" +
|
|
@@ -126,7 +136,7 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
@Test
|
|
@Test
|
|
public void personContextMapperIsSupported() {
|
|
public void personContextMapperIsSupported() {
|
|
setContext(
|
|
setContext(
|
|
- "<ldap-server />" +
|
|
|
|
|
|
+ "<ldap-server ldif='classpath:test-server.ldif'/>" +
|
|
"<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' user-details-class='person'/>");
|
|
"<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' user-details-class='person'/>");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
@@ -136,7 +146,7 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
@Test
|
|
@Test
|
|
public void inetOrgContextMapperIsSupported() {
|
|
public void inetOrgContextMapperIsSupported() {
|
|
setContext(
|
|
setContext(
|
|
- "<ldap-server id='someServer'/>" +
|
|
|
|
|
|
+ "<ldap-server id='someServer' ldif='classpath:test-server.ldif'/>" +
|
|
"<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' user-details-class='inetOrgPerson'/>");
|
|
"<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' user-details-class='inetOrgPerson'/>");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
UserDetails ben = uds.loadUserByUsername("ben");
|
|
@@ -146,7 +156,7 @@ public class LdapUserServiceBeanDefinitionParserTests {
|
|
@Test
|
|
@Test
|
|
public void externalContextMapperIsSupported() {
|
|
public void externalContextMapperIsSupported() {
|
|
setContext(
|
|
setContext(
|
|
- "<ldap-server id='someServer'/>" +
|
|
|
|
|
|
+ "<ldap-server id='someServer' ldif='classpath:test-server.ldif'/>" +
|
|
"<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' user-context-mapper-ref='mapper'/>" +
|
|
"<ldap-user-service id='ldapUDS' user-search-filter='(uid={0})' user-context-mapper-ref='mapper'/>" +
|
|
"<b:bean id='mapper' class='"+ InetOrgPersonContextMapper.class.getName() +"'/>");
|
|
"<b:bean id='mapper' class='"+ InetOrgPersonContextMapper.class.getName() +"'/>");
|
|
|
|
|