Browse Source

Add support for configuring LDAP's referral property

See gh-44850

Signed-off-by: Andras, Dobrosi <dobrosi@gmail.com>
pull/44866/head
Andras, Dobrosi 1 year ago committed by Stéphane Nicoll
parent
commit
59705edbc2
  1. 3
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java
  2. 46
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapProperties.java
  3. 9
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java

3
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java

@ -17,12 +17,14 @@ @@ -17,12 +17,14 @@
package org.springframework.boot.autoconfigure.ldap;
import java.util.Collections;
import java.util.Optional;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.ldap.LdapProperties.Referral;
import org.springframework.boot.autoconfigure.ldap.LdapProperties.Template;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.context.properties.PropertyMapper;
@ -67,6 +69,7 @@ public class LdapAutoConfiguration { @@ -67,6 +69,7 @@ public class LdapAutoConfiguration {
propertyMapper.from(connectionDetails.getUsername()).to(source::setUserDn);
propertyMapper.from(connectionDetails.getPassword()).to(source::setPassword);
propertyMapper.from(properties.getAnonymousReadOnly()).to(source::setAnonymousReadOnly);
Optional.ofNullable(properties.getReferral()).map(Referral::getMode).ifPresent(source::setReferral);
propertyMapper.from(connectionDetails.getBase()).to(source::setBase);
propertyMapper.from(connectionDetails.getUrls()).to(source::setUrls);
propertyMapper.from(properties.getBaseEnvironment())

46
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapProperties.java

@ -21,6 +21,7 @@ import java.util.Map; @@ -21,6 +21,7 @@ import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.env.Environment;
import org.springframework.ldap.ReferralException;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
@ -62,6 +63,11 @@ public class LdapProperties { @@ -62,6 +63,11 @@ public class LdapProperties {
*/
private Boolean anonymousReadOnly;
/**
* Set the method to handle referrals.
*/
private Referral referral;
/**
* LDAP specification settings.
*/
@ -109,6 +115,14 @@ public class LdapProperties { @@ -109,6 +115,14 @@ public class LdapProperties {
this.anonymousReadOnly = anonymousReadOnly;
}
public Referral getReferral() {
return this.referral;
}
public void setReferral(Referral referral) {
this.referral = referral;
}
public Map<String, String> getBaseEnvironment() {
return this.baseEnvironment;
}
@ -182,4 +196,36 @@ public class LdapProperties { @@ -182,4 +196,36 @@ public class LdapProperties {
}
/**
* Enum to define how referrals encountered by the service provider are to be processed.
*/
public enum Referral {
/**
* follow referrals automatically
*/
FOLLOW("follow"),
/**
* ignore referrals
*/
IGNORE("ignore"),
/**
* throw a {@link ReferralException} for each referral
*/
THROW("throw");
private final String mode;
Referral(String mode) {
this.mode = mode;
}
public String getMode() {
return this.mode;
}
}
}

9
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java

@ -38,6 +38,7 @@ import org.springframework.ldap.support.LdapUtils; @@ -38,6 +38,7 @@ import org.springframework.ldap.support.LdapUtils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.springframework.test.util.ReflectionTestUtils.getField;
/**
* Tests for {@link LdapAutoConfiguration}.
@ -88,6 +89,14 @@ class LdapAutoConfigurationTests { @@ -88,6 +89,14 @@ class LdapAutoConfigurationTests {
});
}
@Test
void contextSourceWithReferral() {
this.contextRunner.withPropertyValues("spring.ldap.referral:ignore").run((context) -> {
LdapContextSource contextSource = context.getBean(LdapContextSource.class);
assertThat(getField(contextSource, "referral")).isEqualTo("ignore");
});
}
@Test
void contextSourceWithExtraCustomization() {
this.contextRunner

Loading…
Cancel
Save