| 
					
				 | 
			
			
				@@ -1,6 +1,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package org.springframework.security.config; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.security.ldap.DefaultSpringSecurityContextSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.naming.directory.Attribute; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.naming.directory.Attributes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.naming.directory.BasicAttribute; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.naming.directory.BasicAttributes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.xml.BeanDefinitionParser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.xml.ParserContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -8,7 +12,6 @@ import org.springframework.beans.factory.config.BeanDefinition; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.support.RootBeanDefinition; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.support.BeanDefinitionBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.support.ManagedSet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.ldap.core.DirContextAdapter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.w3c.dom.Element; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -20,7 +23,9 @@ import org.apache.commons.logging.LogFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @version $Id$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class LdapServerBeanDefinitionParser implements BeanDefinitionParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private Log logger = LogFactory.getLog(getClass()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private static final String CONTEXT_SOURCE_CLASS="org.springframework.security.ldap.DefaultSpringSecurityContextSource"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final Log logger = LogFactory.getLog(getClass()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** Defines the Url of the ldap server to use. If not specified, an embedded apache DS instance will be created */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static final String ATT_URL = "url"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,7 +58,8 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!StringUtils.hasText(url)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             contextSource = createEmbeddedServer(elt, parserContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            contextSource = new RootBeanDefinition(DefaultSpringSecurityContextSource.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            contextSource = new RootBeanDefinition(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            contextSource.setBeanClassName(CONTEXT_SOURCE_CLASS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             contextSource.getConstructorArgumentValues().addIndexedArgumentValue(0, url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -92,17 +98,22 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RootBeanDefinition createEmbeddedServer(Element element, ParserContext parserContext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Object source = parserContext.extractSource(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BeanDefinitionBuilder configuration = BeanDefinitionBuilder.rootBeanDefinition("org.apache.directory.server.configuration.MutableServerStartupConfiguration"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BeanDefinitionBuilder partition = BeanDefinitionBuilder.rootBeanDefinition("org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanDefinitionBuilder configuration =  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        	BeanDefinitionBuilder.rootBeanDefinition("org.apache.directory.server.configuration.MutableServerStartupConfiguration"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanDefinitionBuilder partition =  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        	BeanDefinitionBuilder.rootBeanDefinition("org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         configuration.setSource(source); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         partition.setSource(source); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        DirContextAdapter rootContext = new DirContextAdapter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rootContext.setAttributeValues("objectClass", new String[] {"top", "domain", "extensibleObject"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rootContext.setAttributeValue("dc", "springsecurity"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Attributes rootAttributes = new BasicAttributes("dc", "springsecurity"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Attribute a = new BasicAttribute("objectClass"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a.add("top"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a.add("domain"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a.add("extensibleObject"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rootAttributes.put(a); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         partition.addPropertyValue("name", "springsecurity"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        partition.addPropertyValue("contextEntry", rootContext.getAttributes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        partition.addPropertyValue("contextEntry", rootAttributes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String suffix = element.getAttribute(ATT_ROOT_SUFFIX); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -131,15 +142,15 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String url = "ldap://127.0.0.1:" + port + "/" + suffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        RootBeanDefinition contextSource = new RootBeanDefinition(DefaultSpringSecurityContextSource.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        contextSource.getConstructorArgumentValues().addIndexedArgumentValue(0, url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        contextSource.getPropertyValues().addPropertyValue("userDn", "uid=admin,ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        contextSource.getPropertyValues().addPropertyValue("password", "secret"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanDefinitionBuilder contextSource = BeanDefinitionBuilder.rootBeanDefinition(CONTEXT_SOURCE_CLASS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        contextSource.addConstructorArg(url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        contextSource.addPropertyValue("userDn", "uid=admin,ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        contextSource.addPropertyValue("password", "secret"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         RootBeanDefinition apacheContainer = new RootBeanDefinition("org.springframework.security.config.ApacheDSContainer", null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         apacheContainer.setSource(source); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         apacheContainer.getConstructorArgumentValues().addGenericArgumentValue(configuration.getBeanDefinition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        apacheContainer.getConstructorArgumentValues().addGenericArgumentValue(contextSource); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        apacheContainer.getConstructorArgumentValues().addGenericArgumentValue(contextSource.getBeanDefinition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String ldifs = element.getAttribute(ATT_LDIF_FILE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!StringUtils.hasText(ldifs)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -157,6 +168,6 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         parserContext.getRegistry().registerBeanDefinition(BeanIds.EMBEDDED_APACHE_DS, apacheContainer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return contextSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return (RootBeanDefinition) contextSource.getBeanDefinition(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |