Skip to content

Commit 6e84ae6

Browse files
committed
Make SAML 2 login configuration back off with user provider config adapter
Previously, a WebSecurityConfigurerAdapter would be configured irrespective of whether or not the user had provided their own WebSecurityConfigurerAdapter. This then required them to use ordering to diambiguate the configuration and made it harder to take complete control of security configuration. This commit updates the configuration of the SAML 2 login configurer adapter to be conditional on missing bean, aligning it with other security configuration such as the equivalent OAuth 2 configurer adapter. Closes gh-18530
1 parent 07d0794 commit 6e84ae6

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/saml2/Saml2LoginConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.autoconfigure.security.saml2;
1818

1919
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
20+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2021
import org.springframework.context.annotation.Configuration;
2122
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2223
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@@ -33,6 +34,7 @@
3334
class Saml2LoginConfiguration {
3435

3536
@Configuration(proxyBeanMethods = false)
37+
@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
3638
static class Saml2LoginConfigurerAdapter extends WebSecurityConfigurerAdapter {
3739

3840
@Override

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/saml2/Saml2RelyingPartyAutoConfigurationTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.springframework.context.annotation.Bean;
3232
import org.springframework.context.annotation.Configuration;
3333
import org.springframework.security.config.BeanIds;
34+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
3435
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration;
3536
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository;
3637
import org.springframework.security.saml2.provider.service.servlet.filter.Saml2WebSsoAuthenticationFilter;
@@ -104,6 +105,13 @@ void samlLoginShouldBeConfigured() {
104105
.run((context) -> assertThat(hasFilter(context, Saml2WebSsoAuthenticationFilter.class)).isTrue());
105106
}
106107

108+
@Test
109+
void samlLoginShouldBackOffWhenAWebSecurityConfigurerAdapterIsDefined() {
110+
this.contextRunner.withUserConfiguration(WebSecurityConfigurerAdapterConfiguration.class)
111+
.withPropertyValues(getPropertyValues())
112+
.run((context) -> assertThat(hasFilter(context, Saml2WebSsoAuthenticationFilter.class)).isFalse());
113+
}
114+
107115
private String[] getPropertyValues() {
108116
return new String[] {
109117
PREFIX + ".foo.signing.credentials[0].private-key-location=classpath:saml/private-key-location",
@@ -130,4 +138,16 @@ RelyingPartyRegistrationRepository testRegistrationRepository() {
130138

131139
}
132140

141+
@Configuration(proxyBeanMethods = false)
142+
static class WebSecurityConfigurerAdapterConfiguration {
143+
144+
@Bean
145+
WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() {
146+
return new WebSecurityConfigurerAdapter() {
147+
148+
};
149+
}
150+
151+
}
152+
133153
}

0 commit comments

Comments
 (0)