|
@@ -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();
|
|
|
}
|
|
|
}
|