mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-24 04:52:16 +00:00
Add unbounid support in xml
Add unbounid support in xml Fixes gh-6011
This commit is contained in:
commit
abc90280e0
@ -53,6 +53,8 @@ public abstract class BeanIds {
|
|||||||
+ "methodSecurityMetadataSourceAdvisor";
|
+ "methodSecurityMetadataSourceAdvisor";
|
||||||
public static final String EMBEDDED_APACHE_DS = PREFIX
|
public static final String EMBEDDED_APACHE_DS = PREFIX
|
||||||
+ "apacheDirectoryServerContainer";
|
+ "apacheDirectoryServerContainer";
|
||||||
|
public static final String EMBEDDED_UNBOUNDID = PREFIX
|
||||||
|
+ "unboundidServerContainer";
|
||||||
public static final String CONTEXT_SOURCE = PREFIX + "securityContextSource";
|
public static final String CONTEXT_SOURCE = PREFIX + "securityContextSource";
|
||||||
|
|
||||||
public static final String DEBUG_FILTER = PREFIX + "debugFilter";
|
public static final String DEBUG_FILTER = PREFIX + "debugFilter";
|
||||||
|
@ -86,7 +86,7 @@ public final class SecurityNamespaceHandler implements NamespaceHandler {
|
|||||||
if (!namespaceMatchesVersion(element)) {
|
if (!namespaceMatchesVersion(element)) {
|
||||||
pc.getReaderContext()
|
pc.getReaderContext()
|
||||||
.fatal("You cannot use a spring-security-2.0.xsd or spring-security-3.0.xsd or spring-security-3.1.xsd schema or spring-security-3.2.xsd schema or spring-security-4.0.xsd schema "
|
.fatal("You cannot use a spring-security-2.0.xsd or spring-security-3.0.xsd or spring-security-3.1.xsd schema or spring-security-3.2.xsd schema or spring-security-4.0.xsd schema "
|
||||||
+ "with Spring Security 4.2. Please update your schema declarations to the 4.2 schema.",
|
+ "with Spring Security 5.2. Please update your schema declarations to the 5.2 schema.",
|
||||||
element);
|
element);
|
||||||
}
|
}
|
||||||
String name = pc.getDelegate().getLocalName(element);
|
String name = pc.getDelegate().getLocalName(element);
|
||||||
@ -221,7 +221,7 @@ public final class SecurityNamespaceHandler implements NamespaceHandler {
|
|||||||
private boolean matchesVersionInternal(Element element) {
|
private boolean matchesVersionInternal(Element element) {
|
||||||
String schemaLocation = element.getAttributeNS(
|
String schemaLocation = element.getAttributeNS(
|
||||||
"http://www.w3.org/2001/XMLSchema-instance", "schemaLocation");
|
"http://www.w3.org/2001/XMLSchema-instance", "schemaLocation");
|
||||||
return schemaLocation.matches("(?m).*spring-security-4\\.2.*.xsd.*")
|
return schemaLocation.matches("(?m).*spring-security-5\\.2.*.xsd.*")
|
||||||
|| schemaLocation.matches("(?m).*spring-security.xsd.*")
|
|| schemaLocation.matches("(?m).*spring-security.xsd.*")
|
||||||
|| !schemaLocation.matches("(?m).*spring-security.*");
|
|| !schemaLocation.matches("(?m).*spring-security.*");
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -20,6 +20,7 @@ import java.net.ServerSocket;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
@ -28,11 +29,14 @@ import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
|||||||
import org.springframework.beans.factory.xml.ParserContext;
|
import org.springframework.beans.factory.xml.ParserContext;
|
||||||
import org.springframework.security.config.BeanIds;
|
import org.springframework.security.config.BeanIds;
|
||||||
import org.springframework.security.ldap.server.ApacheDSContainer;
|
import org.springframework.security.ldap.server.ApacheDSContainer;
|
||||||
|
import org.springframework.security.ldap.server.UnboundIdContainer;
|
||||||
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
|
* @author Eddú Meléndez
|
||||||
*/
|
*/
|
||||||
public class LdapServerBeanDefinitionParser implements BeanDefinitionParser {
|
public class LdapServerBeanDefinitionParser implements BeanDefinitionParser {
|
||||||
private static final String CONTEXT_SOURCE_CLASS = "org.springframework.security.ldap.DefaultSpringSecurityContextSource";
|
private static final String CONTEXT_SOURCE_CLASS = "org.springframework.security.ldap.DefaultSpringSecurityContextSource";
|
||||||
@ -65,6 +69,12 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser {
|
|||||||
private static final int DEFAULT_PORT = 33389;
|
private static final int DEFAULT_PORT = 33389;
|
||||||
public static final String OPT_DEFAULT_PORT = String.valueOf(DEFAULT_PORT);
|
public static final String OPT_DEFAULT_PORT = String.valueOf(DEFAULT_PORT);
|
||||||
|
|
||||||
|
private static final String APACHEDS_CLASSNAME = "org.apache.directory.server.core.DefaultDirectoryService";
|
||||||
|
private static final String UNBOUNID_CLASSNAME = "com.unboundid.ldap.listener.InMemoryDirectoryServer";
|
||||||
|
|
||||||
|
private static final String APACHEDS_CONTAINER_CLASSNAME = "org.springframework.security.ldap.server.ApacheDSContainer";
|
||||||
|
private static final String UNBOUNDID_CONTAINER_CLASSNAME = "org.springframework.security.ldap.server.UnboundIdContainer";
|
||||||
|
|
||||||
public BeanDefinition parse(Element elt, ParserContext parserContext) {
|
public BeanDefinition parse(Element elt, ParserContext parserContext) {
|
||||||
String url = elt.getAttribute(ATT_URL);
|
String url = elt.getAttribute(ATT_URL);
|
||||||
|
|
||||||
@ -114,6 +124,7 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser {
|
|||||||
* @return the BeanDefinition for the ContextSource for the embedded server.
|
* @return the BeanDefinition for the ContextSource for the embedded server.
|
||||||
*
|
*
|
||||||
* @see ApacheDSContainer
|
* @see ApacheDSContainer
|
||||||
|
* @see UnboundIdContainer
|
||||||
*/
|
*/
|
||||||
private RootBeanDefinition createEmbeddedServer(Element element,
|
private RootBeanDefinition createEmbeddedServer(Element element,
|
||||||
ParserContext parserContext) {
|
ParserContext parserContext) {
|
||||||
@ -142,34 +153,65 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser {
|
|||||||
contextSource.addPropertyValue("userDn", "uid=admin,ou=system");
|
contextSource.addPropertyValue("userDn", "uid=admin,ou=system");
|
||||||
contextSource.addPropertyValue("password", "secret");
|
contextSource.addPropertyValue("password", "secret");
|
||||||
|
|
||||||
RootBeanDefinition apacheContainer = new RootBeanDefinition(
|
String mode = element.getAttribute("mode");
|
||||||
"org.springframework.security.ldap.server.ApacheDSContainer", null, null);
|
RootBeanDefinition ldapContainer = getRootBeanDefinition(mode);
|
||||||
apacheContainer.setSource(source);
|
ldapContainer.setSource(source);
|
||||||
apacheContainer.getConstructorArgumentValues().addGenericArgumentValue(suffix);
|
ldapContainer.getConstructorArgumentValues().addGenericArgumentValue(suffix);
|
||||||
|
|
||||||
String ldifs = element.getAttribute(ATT_LDIF_FILE);
|
String ldifs = element.getAttribute(ATT_LDIF_FILE);
|
||||||
if (!StringUtils.hasText(ldifs)) {
|
if (!StringUtils.hasText(ldifs)) {
|
||||||
ldifs = OPT_DEFAULT_LDIF_FILE;
|
ldifs = OPT_DEFAULT_LDIF_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
apacheContainer.getConstructorArgumentValues().addGenericArgumentValue(ldifs);
|
ldapContainer.getConstructorArgumentValues().addGenericArgumentValue(ldifs);
|
||||||
apacheContainer.getPropertyValues().addPropertyValue("port", port);
|
ldapContainer.getPropertyValues().addPropertyValue("port", port);
|
||||||
|
|
||||||
logger.info("Embedded LDAP server bean definition created for URL: " + url);
|
logger.info("Embedded LDAP server bean definition created for URL: " + url);
|
||||||
|
|
||||||
if (parserContext.getRegistry()
|
if (parserContext.getRegistry()
|
||||||
.containsBeanDefinition(BeanIds.EMBEDDED_APACHE_DS)) {
|
.containsBeanDefinition(BeanIds.EMBEDDED_APACHE_DS) ||
|
||||||
|
parserContext.getRegistry().containsBeanDefinition(BeanIds.EMBEDDED_UNBOUNDID)) {
|
||||||
parserContext.getReaderContext().error(
|
parserContext.getReaderContext().error(
|
||||||
"Only one embedded server bean is allowed per application context",
|
"Only one embedded server bean is allowed per application context",
|
||||||
element);
|
element);
|
||||||
}
|
}
|
||||||
|
|
||||||
parserContext.getRegistry().registerBeanDefinition(BeanIds.EMBEDDED_APACHE_DS,
|
String beanId = resolveBeanId(mode);
|
||||||
apacheContainer);
|
if (beanId != null) {
|
||||||
|
parserContext.getRegistry().registerBeanDefinition(beanId, ldapContainer);
|
||||||
|
}
|
||||||
|
|
||||||
return (RootBeanDefinition) contextSource.getBeanDefinition();
|
return (RootBeanDefinition) contextSource.getBeanDefinition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RootBeanDefinition getRootBeanDefinition(String mode) {
|
||||||
|
if (isApacheDsEnabled(mode)) {
|
||||||
|
return new RootBeanDefinition(APACHEDS_CONTAINER_CLASSNAME, null, null);
|
||||||
|
}
|
||||||
|
else if (isUnboundidEnabled(mode)) {
|
||||||
|
return new RootBeanDefinition(UNBOUNDID_CONTAINER_CLASSNAME, null, null);
|
||||||
|
}
|
||||||
|
throw new IllegalStateException("Embedded LDAP server is not provided");
|
||||||
|
}
|
||||||
|
|
||||||
|
private String resolveBeanId(String mode) {
|
||||||
|
if (isApacheDsEnabled(mode)) {
|
||||||
|
return BeanIds.EMBEDDED_APACHE_DS;
|
||||||
|
}
|
||||||
|
else if (isUnboundidEnabled(mode)) {
|
||||||
|
return BeanIds.EMBEDDED_UNBOUNDID;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isApacheDsEnabled(String mode) {
|
||||||
|
return "apacheds".equals(mode) || ClassUtils.isPresent(APACHEDS_CLASSNAME, getClass().getClassLoader());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isUnboundidEnabled(String mode) {
|
||||||
|
return "unboundid".equals(mode) || ClassUtils.isPresent(UNBOUNID_CLASSNAME, getClass().getClassLoader());
|
||||||
|
}
|
||||||
|
|
||||||
private String getDefaultPort() {
|
private String getDefaultPort() {
|
||||||
ServerSocket serverSocket = null;
|
ServerSocket serverSocket = null;
|
||||||
try {
|
try {
|
||||||
@ -196,4 +238,5 @@ public class LdapServerBeanDefinitionParser implements BeanDefinitionParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
http\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-5.2.xsd
|
https\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-5.2.xsd
|
||||||
http\://www.springframework.org/schema/security/spring-security-5.2.xsd=org/springframework/security/config/spring-security-5.2.xsd
|
https\://www.springframework.org/schema/security/spring-security-5.2.xsd=org/springframework/security/config/spring-security-5.2.xsd
|
||||||
http\://www.springframework.org/schema/security/spring-security-5.1.xsd=org/springframework/security/config/spring-security-5.1.xsd
|
http\://www.springframework.org/schema/security/spring-security-5.1.xsd=org/springframework/security/config/spring-security-5.1.xsd
|
||||||
http\://www.springframework.org/schema/security/spring-security-5.0.xsd=org/springframework/security/config/spring-security-5.0.xsd
|
http\://www.springframework.org/schema/security/spring-security-5.0.xsd=org/springframework/security/config/spring-security-5.0.xsd
|
||||||
http\://www.springframework.org/schema/security/spring-security-4.2.xsd=org/springframework/security/config/spring-security-4.2.xsd
|
http\://www.springframework.org/schema/security/spring-security-4.2.xsd=org/springframework/security/config/spring-security-4.2.xsd
|
||||||
|
@ -83,6 +83,9 @@ ldap-server.attlist &=
|
|||||||
ldap-server.attlist &=
|
ldap-server.attlist &=
|
||||||
## Optional root suffix for the embedded LDAP server. Default is "dc=springframework,dc=org"
|
## Optional root suffix for the embedded LDAP server. Default is "dc=springframework,dc=org"
|
||||||
attribute root { xsd:string }?
|
attribute root { xsd:string }?
|
||||||
|
ldap-server.attlist &=
|
||||||
|
## Explicitly specifies which embedded ldap server should use. Values are 'apacheds' and 'unboundid'. By default, it will depends if the library is available in the classpath.
|
||||||
|
attribute mode { "apacheds" | "unboundid" }?
|
||||||
|
|
||||||
ldap-server-ref-attribute =
|
ldap-server-ref-attribute =
|
||||||
## The optional server to use. If omitted, and a default LDAP server is registered (using <ldap-server> with no Id), that server will be used.
|
## The optional server to use. If omitted, and a default LDAP server is registered (using <ldap-server> with no Id), that server will be used.
|
||||||
|
@ -222,6 +222,19 @@
|
|||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:attribute>
|
</xs:attribute>
|
||||||
|
<xs:attribute name="mode">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Explicitly specifies which embedded ldap server should use. Values are 'apacheds' and
|
||||||
|
'unboundid'. By default, it will depends if the library is available in the classpath.
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:token">
|
||||||
|
<xs:enumeration value="apacheds"/>
|
||||||
|
<xs:enumeration value="unboundid"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:attribute>
|
||||||
</xs:attributeGroup>
|
</xs:attributeGroup>
|
||||||
<xs:attributeGroup name="ldap-server-ref-attribute">
|
<xs:attributeGroup name="ldap-server-ref-attribute">
|
||||||
<xs:attribute name="server-ref" use="required" type="xs:token">
|
<xs:attribute name="server-ref" use="required" type="xs:token">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2009-2013 the original author or authors.
|
* Copyright 2009-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -23,6 +23,7 @@ import org.springframework.security.util.InMemoryResource;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
|
* @author Eddú Meléndez
|
||||||
*/
|
*/
|
||||||
public class InMemoryXmlApplicationContext extends AbstractXmlApplicationContext {
|
public class InMemoryXmlApplicationContext extends AbstractXmlApplicationContext {
|
||||||
static final String BEANS_OPENING = "<b:beans xmlns='http://www.springframework.org/schema/security'\n"
|
static final String BEANS_OPENING = "<b:beans xmlns='http://www.springframework.org/schema/security'\n"
|
||||||
@ -37,10 +38,10 @@ public class InMemoryXmlApplicationContext extends AbstractXmlApplicationContext
|
|||||||
+ "http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd\n"
|
+ "http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd\n"
|
||||||
+ "http://www.springframework.org/schema/websocket https://www.springframework.org/schema/websocket/spring-websocket.xsd\n"
|
+ "http://www.springframework.org/schema/websocket https://www.springframework.org/schema/websocket/spring-websocket.xsd\n"
|
||||||
+ "http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-2.5.xsd\n"
|
+ "http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-2.5.xsd\n"
|
||||||
+ "http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-";
|
+ "http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security-";
|
||||||
static final String BEANS_CLOSE = "</b:beans>\n";
|
static final String BEANS_CLOSE = "</b:beans>\n";
|
||||||
|
|
||||||
static final String SPRING_SECURITY_VERSION = "4.2";
|
static final String SPRING_SECURITY_VERSION = "5.2";
|
||||||
|
|
||||||
Resource inMemoryXml;
|
Resource inMemoryXml;
|
||||||
|
|
||||||
|
@ -47,6 +47,8 @@ This can be configured to point at an external LDAP server, using the `url` attr
|
|||||||
<ldap-server url="ldap://springframework.org:389/dc=springframework,dc=org" />
|
<ldap-server url="ldap://springframework.org:389/dc=springframework,dc=org" />
|
||||||
----
|
----
|
||||||
|
|
||||||
|
NOTE: `spring-security` provides integration with `apacheds` and `unboundid` as a embedded ldap servers. You can choose between them using the attribute `mode` in `ldap-server`.
|
||||||
|
|
||||||
==== Using an Embedded Test Server
|
==== Using an Embedded Test Server
|
||||||
The `<ldap-server>` element can also be used to create an embedded server, which can be very useful for testing and demonstrations.
|
The `<ldap-server>` element can also be used to create an embedded server, which can be very useful for testing and demonstrations.
|
||||||
In this case you use it without the `url` attribute:
|
In this case you use it without the `url` attribute:
|
||||||
|
@ -2360,6 +2360,9 @@ This is actually the bean `id` of the `ContextSource` instance, if you want to u
|
|||||||
[[nsa-ldap-server-attributes]]
|
[[nsa-ldap-server-attributes]]
|
||||||
===== <ldap-server> Attributes
|
===== <ldap-server> Attributes
|
||||||
|
|
||||||
|
[[nsa-ldap-server-mode]]
|
||||||
|
* **mode**
|
||||||
|
Explicitly specifies which embedded ldap server should use. Values are `apacheds` and `unboundid`. By default, it will depends if the library is available in the classpath.
|
||||||
|
|
||||||
[[nsa-ldap-server-id]]
|
[[nsa-ldap-server-id]]
|
||||||
* **id**
|
* **id**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
= Spring Security Reference
|
= Spring Security Reference
|
||||||
Ben Alex; Luke Taylor; Rob Winch; Gunnar Hillert; Joe Grandja; Jay Bryant
|
Ben Alex; Luke Taylor; Rob Winch; Gunnar Hillert; Joe Grandja; Jay Bryant; Eddú Meléndez
|
||||||
:include-dir: _includes
|
:include-dir: _includes
|
||||||
:security-api-url: https://docs.spring.io/spring-security/site/docs/current/api/
|
:security-api-url: https://docs.spring.io/spring-security/site/docs/current/api/
|
||||||
:source-indent: 0
|
:source-indent: 0
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
apply plugin: 'io.spring.convention.spring-test'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':spring-security-core')
|
||||||
|
compile 'org.springframework:spring-beans'
|
||||||
|
compile 'org.springframework:spring-context'
|
||||||
|
compile 'org.springframework:spring-core'
|
||||||
|
compile 'org.springframework:spring-tx'
|
||||||
|
compile project(':spring-security-config')
|
||||||
|
compile project(':spring-security-ldap')
|
||||||
|
|
||||||
|
runtime apachedsDependencies
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2002-2019 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
|
||||||
|
*
|
||||||
|
* https://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;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
|
import org.springframework.security.config.BeanIds;
|
||||||
|
import org.springframework.security.ldap.server.ApacheDSContainer;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Eddú Meléndez
|
||||||
|
*/
|
||||||
|
public class LdapServerBeanDefinitionParserTests {
|
||||||
|
|
||||||
|
private ClassPathXmlApplicationContext context;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
this.context = new ClassPathXmlApplicationContext("applicationContext-security.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void closeAppContext() {
|
||||||
|
if (this.context != null) {
|
||||||
|
this.context.close();
|
||||||
|
this.context = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void apacheDirectoryServerIsStartedByDefault() {
|
||||||
|
String[] beanNames = this.context.getBeanNamesForType(ApacheDSContainer.class);
|
||||||
|
assertThat(beanNames).hasSize(1);
|
||||||
|
assertThat(beanNames[0]).isEqualTo(BeanIds.EMBEDDED_APACHE_DS);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:s="http://www.springframework.org/schema/security"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd">
|
||||||
|
|
||||||
|
<s:ldap-server ldif="classpath:users.ldif"/>
|
||||||
|
|
||||||
|
</beans>
|
@ -0,0 +1,60 @@
|
|||||||
|
dn: ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: groups
|
||||||
|
|
||||||
|
dn: ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: people
|
||||||
|
|
||||||
|
dn: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Rod Johnson
|
||||||
|
sn: Johnson
|
||||||
|
uid: rod
|
||||||
|
userPassword: koala
|
||||||
|
|
||||||
|
dn: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Dianne Emu
|
||||||
|
sn: Emu
|
||||||
|
uid: dianne
|
||||||
|
userPassword: emu
|
||||||
|
|
||||||
|
dn: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Scott
|
||||||
|
sn: Wombat
|
||||||
|
uid: scott
|
||||||
|
userPassword: wombat
|
||||||
|
|
||||||
|
dn: cn=user,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: user
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=teller,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: teller
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=supervisor,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: supervisor
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
@ -0,0 +1,13 @@
|
|||||||
|
apply plugin: 'io.spring.convention.spring-test'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':spring-security-core')
|
||||||
|
compile 'org.springframework:spring-beans'
|
||||||
|
compile 'org.springframework:spring-context'
|
||||||
|
compile 'org.springframework:spring-core'
|
||||||
|
compile 'org.springframework:spring-tx'
|
||||||
|
compile project(':spring-security-config')
|
||||||
|
compile project(':spring-security-ldap')
|
||||||
|
|
||||||
|
runtime apachedsDependencies
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2002-2019 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
|
||||||
|
*
|
||||||
|
* https://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;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
|
import org.springframework.security.config.BeanIds;
|
||||||
|
import org.springframework.security.ldap.server.ApacheDSContainer;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Eddú Meléndez
|
||||||
|
*/
|
||||||
|
public class LdapServerBeanDefinitionParserTests {
|
||||||
|
|
||||||
|
private ClassPathXmlApplicationContext context;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
this.context = new ClassPathXmlApplicationContext("applicationContext-security.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void closeAppContext() {
|
||||||
|
if (this.context != null) {
|
||||||
|
this.context.close();
|
||||||
|
this.context = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void apacheDirectoryServerIsStartedByDefault() {
|
||||||
|
String[] beanNames = this.context.getBeanNamesForType(ApacheDSContainer.class);
|
||||||
|
assertThat(beanNames).hasSize(1);
|
||||||
|
assertThat(beanNames[0]).isEqualTo(BeanIds.EMBEDDED_APACHE_DS);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:s="http://www.springframework.org/schema/security"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd">
|
||||||
|
|
||||||
|
<s:ldap-server mode="apacheds" ldif="classpath:users.ldif"/>
|
||||||
|
|
||||||
|
</beans>
|
@ -0,0 +1,60 @@
|
|||||||
|
dn: ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: groups
|
||||||
|
|
||||||
|
dn: ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: people
|
||||||
|
|
||||||
|
dn: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Rod Johnson
|
||||||
|
sn: Johnson
|
||||||
|
uid: rod
|
||||||
|
userPassword: koala
|
||||||
|
|
||||||
|
dn: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Dianne Emu
|
||||||
|
sn: Emu
|
||||||
|
uid: dianne
|
||||||
|
userPassword: emu
|
||||||
|
|
||||||
|
dn: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Scott
|
||||||
|
sn: Wombat
|
||||||
|
uid: scott
|
||||||
|
userPassword: wombat
|
||||||
|
|
||||||
|
dn: cn=user,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: user
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=teller,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: teller
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=supervisor,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: supervisor
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
@ -0,0 +1,13 @@
|
|||||||
|
apply plugin: 'io.spring.convention.spring-test'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':spring-security-core')
|
||||||
|
compile 'org.springframework:spring-beans'
|
||||||
|
compile 'org.springframework:spring-context'
|
||||||
|
compile 'org.springframework:spring-core'
|
||||||
|
compile 'org.springframework:spring-tx'
|
||||||
|
compile project(':spring-security-config')
|
||||||
|
compile project(':spring-security-ldap')
|
||||||
|
|
||||||
|
testCompile "com.unboundid:unboundid-ldapsdk"
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2002-2019 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
|
||||||
|
*
|
||||||
|
* https://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;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
|
import org.springframework.security.config.BeanIds;
|
||||||
|
import org.springframework.security.ldap.server.UnboundIdContainer;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Eddú Meléndez
|
||||||
|
*/
|
||||||
|
public class LdapServerBeanDefinitionParserTests {
|
||||||
|
|
||||||
|
private ClassPathXmlApplicationContext context;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
this.context = new ClassPathXmlApplicationContext("applicationContext-security.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void closeAppContext() {
|
||||||
|
if (this.context != null) {
|
||||||
|
this.context.close();
|
||||||
|
this.context = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void apacheDirectoryServerIsStartedByDefault() {
|
||||||
|
String[] beanNames = this.context.getBeanNamesForType(UnboundIdContainer.class);
|
||||||
|
assertThat(beanNames).hasSize(1);
|
||||||
|
assertThat(beanNames[0]).isEqualTo(BeanIds.EMBEDDED_UNBOUNDID);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:s="http://www.springframework.org/schema/security"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd">
|
||||||
|
|
||||||
|
<s:ldap-server mode="unboundid" ldif="classpath:users.ldif"/>
|
||||||
|
|
||||||
|
</beans>
|
@ -0,0 +1,60 @@
|
|||||||
|
dn: ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: groups
|
||||||
|
|
||||||
|
dn: ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: people
|
||||||
|
|
||||||
|
dn: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Rod Johnson
|
||||||
|
sn: Johnson
|
||||||
|
uid: rod
|
||||||
|
userPassword: koala
|
||||||
|
|
||||||
|
dn: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Dianne Emu
|
||||||
|
sn: Emu
|
||||||
|
uid: dianne
|
||||||
|
userPassword: emu
|
||||||
|
|
||||||
|
dn: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Scott
|
||||||
|
sn: Wombat
|
||||||
|
uid: scott
|
||||||
|
userPassword: wombat
|
||||||
|
|
||||||
|
dn: cn=user,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: user
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=teller,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: teller
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=supervisor,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: supervisor
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
@ -0,0 +1,11 @@
|
|||||||
|
apply plugin: 'io.spring.convention.spring-test'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':spring-security-core')
|
||||||
|
compile 'org.springframework:spring-beans'
|
||||||
|
compile 'org.springframework:spring-context'
|
||||||
|
compile 'org.springframework:spring-core'
|
||||||
|
compile 'org.springframework:spring-tx'
|
||||||
|
compile project(':spring-security-config')
|
||||||
|
compile project(':spring-security-ldap')
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2002-2019 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
|
||||||
|
*
|
||||||
|
* https://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;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.BeanDefinitionStoreException;
|
||||||
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Eddú Meléndez
|
||||||
|
*/
|
||||||
|
public class LdapServerBeanDefinitionParserTests {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public ExpectedException thrown = ExpectedException.none();
|
||||||
|
|
||||||
|
private ClassPathXmlApplicationContext context;
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void closeAppContext() {
|
||||||
|
if (this.context != null) {
|
||||||
|
this.context.close();
|
||||||
|
this.context = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void apacheDirectoryServerIsStartedByDefault() {
|
||||||
|
this.thrown.expect(BeanDefinitionStoreException.class);
|
||||||
|
this.thrown.expectMessage("Embedded LDAP server is not provided");
|
||||||
|
|
||||||
|
this.context = new ClassPathXmlApplicationContext("applicationContext-security.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:s="http://www.springframework.org/schema/security"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd">
|
||||||
|
|
||||||
|
<s:ldap-server ldif="classpath:users.ldif"/>
|
||||||
|
|
||||||
|
</beans>
|
@ -0,0 +1,60 @@
|
|||||||
|
dn: ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: groups
|
||||||
|
|
||||||
|
dn: ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: people
|
||||||
|
|
||||||
|
dn: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Rod Johnson
|
||||||
|
sn: Johnson
|
||||||
|
uid: rod
|
||||||
|
userPassword: koala
|
||||||
|
|
||||||
|
dn: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Dianne Emu
|
||||||
|
sn: Emu
|
||||||
|
uid: dianne
|
||||||
|
userPassword: emu
|
||||||
|
|
||||||
|
dn: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Scott
|
||||||
|
sn: Wombat
|
||||||
|
uid: scott
|
||||||
|
userPassword: wombat
|
||||||
|
|
||||||
|
dn: cn=user,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: user
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=teller,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: teller
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=supervisor,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: supervisor
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
@ -0,0 +1,13 @@
|
|||||||
|
apply plugin: 'io.spring.convention.spring-test'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':spring-security-core')
|
||||||
|
compile 'org.springframework:spring-beans'
|
||||||
|
compile 'org.springframework:spring-context'
|
||||||
|
compile 'org.springframework:spring-core'
|
||||||
|
compile 'org.springframework:spring-tx'
|
||||||
|
compile project(':spring-security-config')
|
||||||
|
compile project(':spring-security-ldap')
|
||||||
|
|
||||||
|
testCompile "com.unboundid:unboundid-ldapsdk"
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2002-2019 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
|
||||||
|
*
|
||||||
|
* https://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;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
|
import org.springframework.security.config.BeanIds;
|
||||||
|
import org.springframework.security.ldap.server.UnboundIdContainer;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Eddú Meléndez
|
||||||
|
*/
|
||||||
|
public class LdapServerBeanDefinitionParserTests {
|
||||||
|
|
||||||
|
private ClassPathXmlApplicationContext context;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
this.context = new ClassPathXmlApplicationContext("applicationContext-security.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void closeAppContext() {
|
||||||
|
if (this.context != null) {
|
||||||
|
this.context.close();
|
||||||
|
this.context = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void apacheDirectoryServerIsStartedByDefault() {
|
||||||
|
String[] beanNames = this.context.getBeanNamesForType(UnboundIdContainer.class);
|
||||||
|
assertThat(beanNames).hasSize(1);
|
||||||
|
assertThat(beanNames[0]).isEqualTo(BeanIds.EMBEDDED_UNBOUNDID);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:s="http://www.springframework.org/schema/security"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd">
|
||||||
|
|
||||||
|
<s:ldap-server ldif="classpath:users.ldif"/>
|
||||||
|
|
||||||
|
</beans>
|
@ -0,0 +1,60 @@
|
|||||||
|
dn: ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: groups
|
||||||
|
|
||||||
|
dn: ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: organizationalUnit
|
||||||
|
ou: people
|
||||||
|
|
||||||
|
dn: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Rod Johnson
|
||||||
|
sn: Johnson
|
||||||
|
uid: rod
|
||||||
|
userPassword: koala
|
||||||
|
|
||||||
|
dn: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Dianne Emu
|
||||||
|
sn: Emu
|
||||||
|
uid: dianne
|
||||||
|
userPassword: emu
|
||||||
|
|
||||||
|
dn: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: person
|
||||||
|
objectclass: organizationalPerson
|
||||||
|
objectclass: inetOrgPerson
|
||||||
|
cn: Scott
|
||||||
|
sn: Wombat
|
||||||
|
uid: scott
|
||||||
|
userPassword: wombat
|
||||||
|
|
||||||
|
dn: cn=user,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: user
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=scott,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=teller,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: teller
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
||||||
|
member: uid=dianne,ou=people,dc=springframework,dc=org
|
||||||
|
|
||||||
|
dn: cn=supervisor,ou=groups,dc=springframework,dc=org
|
||||||
|
objectclass: top
|
||||||
|
objectclass: groupOfNames
|
||||||
|
cn: supervisor
|
||||||
|
member: uid=rod,ou=people,dc=springframework,dc=org
|
Loading…
x
Reference in New Issue
Block a user