diff --git a/core/src/main/java/org/springframework/ldap/core/support/BaseLdapPathBeanPostProcessor.java b/core/src/main/java/org/springframework/ldap/core/support/BaseLdapPathBeanPostProcessor.java index dddaf94a..3032c50f 100644 --- a/core/src/main/java/org/springframework/ldap/core/support/BaseLdapPathBeanPostProcessor.java +++ b/core/src/main/java/org/springframework/ldap/core/support/BaseLdapPathBeanPostProcessor.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.core.Ordered; import org.springframework.ldap.core.DistinguishedName; import org.springframework.util.StringUtils; @@ -46,7 +47,7 @@ import org.springframework.util.StringUtils; * @author Mattias Hellborg Arthursson * @since 1.2 */ -public class BaseLdapPathBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware { +public class BaseLdapPathBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, Ordered { private ApplicationContext applicationContext; @@ -54,7 +55,9 @@ public class BaseLdapPathBeanPostProcessor implements BeanPostProcessor, Applica private String baseLdapPathSourceName; - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + private int order = Ordered.LOWEST_PRECEDENCE; + + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof BaseLdapPathAware) { BaseLdapPathAware baseLdapPathAware = (BaseLdapPathAware) bean; @@ -87,7 +90,7 @@ public class BaseLdapPathBeanPostProcessor implements BeanPostProcessor, Applica /* * (non-Javadoc) * - * @seeorg.springframework.beans.factory.config.BeanPostProcessor# + * @see org.springframework.beans.factory.config.BeanPostProcessor# * postProcessAfterInitialization(java.lang.Object, java.lang.String) */ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { @@ -123,4 +126,18 @@ public class BaseLdapPathBeanPostProcessor implements BeanPostProcessor, Applica this.baseLdapPathSourceName = contextSourceName; } + /** + * Set the order value of this object for sorting purposes. + * + * @param order the order of this instance. Defaults to Ordered.LOWEST_PRECEDENCE. + * @see Ordered + * @since 1.3.2 + */ + public void setOrder(int order) { + this.order = order; + } + + public int getOrder() { + return order; + } } diff --git a/test/integration-tests/build.gradle b/test/integration-tests/build.gradle index 794e7262..093ef533 100644 --- a/test/integration-tests/build.gradle +++ b/test/integration-tests/build.gradle @@ -3,9 +3,18 @@ repositories { } apply from: JAVA_SCRIPT +ext.springSecurityVersion='3.0.5.RELEASE' + dependencies { compile project(":spring-ldap-test"), - project(":spring-ldap-core-tiger") + project(":spring-ldap-core-tiger"), + compile("org.springframework.security:spring-security-core:$springSecurityVersion") { + exclude group: "org.springframework", module: "spring-expression" + exclude group: "org.springframework", module: "spring-core" + exclude group: "org.springframework", module: "spring-context" + exclude group: "org.springframework", module: "spring-tx" + exclude group: "org.springframework", module: "spring-aop" + } provided "commons-pool:commons-pool:$commonsPoolVersion", "org.springframework:spring-jdbc:$springVersion", @@ -13,9 +22,15 @@ dependencies { testCompile "org.springframework:spring-test:$springVersion", "org.springframework:spring-aop:$springVersion", + "org.springframework:spring-expression:$springVersion", "org.hibernate:hibernate:3.2.6.ga", "aspectj:aspectjrt:1.5.3", "aspectj:aspectjweaver:1.5.3", "hsqldb:hsqldb:1.8.0.7", - "junit:junit:$junitVersion" + "junit:junit:$junitVersion", + "org.springframework.security:spring-security-config:$springSecurityVersion" + + testCompile("org.springframework.security:spring-security-ldap:$springSecurityVersion") { + exclude group: "org.springframework.ldap", module: "spring-ldap-core" + } } \ No newline at end of file diff --git a/test/integration-tests/src/main/java/org/springframework/ldap/itest/LdapGroupDao.java b/test/integration-tests/src/main/java/org/springframework/ldap/itest/LdapGroupDao.java new file mode 100644 index 00000000..cd2b7c27 --- /dev/null +++ b/test/integration-tests/src/main/java/org/springframework/ldap/itest/LdapGroupDao.java @@ -0,0 +1,27 @@ +package org.springframework.ldap.itest; + +import org.springframework.ldap.core.DistinguishedName; +import org.springframework.ldap.core.support.BaseLdapPathAware; + +import javax.naming.Name; + +/** + * + * @author Mattias Hellborg Arthursson + */ +public class LdapGroupDao implements BaseLdapPathAware +{ + private Name basePath; + + public LdapGroupDao() { + super(); + } + + public void setBaseLdapPath(DistinguishedName baseLdapPath) { + this.basePath = baseLdapPath; + } + + public Name getBasePath() { + return basePath; + } +} diff --git a/test/integration-tests/src/main/java/org/springframework/ldap/itest/support/springsecurity/MethodSecurityExpressionHandler.java b/test/integration-tests/src/main/java/org/springframework/ldap/itest/support/springsecurity/MethodSecurityExpressionHandler.java new file mode 100644 index 00000000..cef6c866 --- /dev/null +++ b/test/integration-tests/src/main/java/org/springframework/ldap/itest/support/springsecurity/MethodSecurityExpressionHandler.java @@ -0,0 +1,20 @@ +package org.springframework.ldap.itest.support.springsecurity; + +import org.springframework.ldap.itest.LdapGroupDao; +import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; + +/** + * @author Mattias Hellborg Arthursson + */ +public class MethodSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandler { + private LdapGroupDao groupDao; + + public LdapGroupDao getGroupDao() { + return groupDao; + } + + public void setGroupDao(LdapGroupDao groupDao) { + this.groupDao = groupDao; + } + +} diff --git a/test/integration-tests/src/test/java/org/springframework/ldap/integration/JiraLdap247ITest.java b/test/integration-tests/src/test/java/org/springframework/ldap/integration/JiraLdap247ITest.java new file mode 100644 index 00000000..871a2bb9 --- /dev/null +++ b/test/integration-tests/src/test/java/org/springframework/ldap/integration/JiraLdap247ITest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2005-2010 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.ldap.integration; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ldap.AbstractLdapTemplateIntegrationTest; +import org.springframework.ldap.itest.LdapGroupDao; +import org.springframework.test.context.ContextConfiguration; + +import static org.junit.Assert.assertNotNull; + +/** + * Tests for https://jira.springsource.org/browse/LDAP-247. + * Thanks to Jürgen Failenschmid for spotting the problem and providing the code for testing this. + * + * @author Mattias Hellborg Arthursson + */ +@ContextConfiguration(locations = { "/conf/ldap-247-testContext.xml" }) +public class JiraLdap247ITest extends AbstractLdapTemplateIntegrationTest { + + @Autowired + private LdapGroupDao ldapGroupDao; + + @Test + public void verifyThatBasePathIsProperlyPopulated() { + assertNotNull(ldapGroupDao); + + // The base path should be automatically populated by BaseLdapPathBeanPostProcessor, + // but it doesn't unless it implements Ordered, which caused the assertion below to fail. + assertNotNull( + "Base path has not been populated by BaseLdapPathBeanPostProcessor", + ldapGroupDao.getBasePath()); + } +} diff --git a/test/integration-tests/src/test/resources/conf/ldap-247-testContext.xml b/test/integration-tests/src/test/resources/conf/ldap-247-testContext.xml new file mode 100644 index 00000000..52afb55c --- /dev/null +++ b/test/integration-tests/src/test/resources/conf/ldap-247-testContext.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file