Add support for configuring LDAP's referral property
See gh-44850 Signed-off-by: Andras, Dobrosi <dobrosi@gmail.com>
This commit is contained in:
committed by
Stéphane Nicoll
parent
f8047ffb8b
commit
59705edbc2
@@ -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 {
|
||||
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())
|
||||
|
||||
@@ -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 {
|
||||
*/
|
||||
private Boolean anonymousReadOnly;
|
||||
|
||||
/**
|
||||
* Set the method to handle referrals.
|
||||
*/
|
||||
private Referral referral;
|
||||
|
||||
/**
|
||||
* LDAP specification settings.
|
||||
*/
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
});
|
||||
}
|
||||
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user