Skip to content

Commit d3ecd02

Browse files
committed
Merge branch '2.0.x'
2 parents 24051b4 + e413942 commit d3ecd02

File tree

4 files changed

+47
-129
lines changed

4 files changed

+47
-129
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/reactive/ReactiveSecurityAutoConfiguration.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,40 @@
1616

1717
package org.springframework.boot.autoconfigure.security.reactive;
1818

19+
import reactor.core.publisher.Flux;
20+
1921
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
22+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2025
import org.springframework.boot.autoconfigure.security.SecurityProperties;
2126
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2227
import org.springframework.context.annotation.Configuration;
23-
import org.springframework.context.annotation.Import;
28+
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
29+
import org.springframework.security.web.server.WebFilterChainProxy;
2430

2531
/**
2632
* {@link EnableAutoConfiguration Auto-configuration} for Spring Security in a reactive
27-
* application.
33+
* application. Switches on {@link EnableWebFluxSecurity} for a reactive web application
34+
* if this annotation has not been added by the user. It delegates to Spring Security's
35+
* content-negotiation mechanism for authentication. This configuration also backs off if
36+
* a bean of type {@link WebFilterChainProxy} has been configured in any other way.
2837
*
2938
* @author Madhura Bhave
3039
* @since 2.0.0
3140
*/
3241
@Configuration
3342
@EnableConfigurationProperties(SecurityProperties.class)
34-
@Import(WebFluxSecurityConfiguration.class)
43+
@ConditionalOnClass({ Flux.class, EnableWebFluxSecurity.class,
44+
WebFilterChainProxy.class })
3545
public class ReactiveSecurityAutoConfiguration {
3646

47+
@Configuration
48+
@ConditionalOnMissingBean(WebFilterChainProxy.class)
49+
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
50+
@EnableWebFluxSecurity
51+
static class EnableWebFluxSecurityConfiguration {
52+
53+
}
54+
3755
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/reactive/WebFluxSecurityConfiguration.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/reactive/ReactiveSecurityAutoConfigurationTests.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@
2020

2121
import org.springframework.boot.autoconfigure.AutoConfigurations;
2222
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
23+
import org.springframework.context.annotation.Bean;
24+
import org.springframework.context.annotation.Configuration;
2325
import org.springframework.security.web.server.WebFilterChainProxy;
2426

2527
import static org.assertj.core.api.Assertions.assertThat;
28+
import static org.mockito.Mockito.mock;
2629

2730
/**
2831
* Tests for {@link ReactiveSecurityAutoConfiguration}.
@@ -34,17 +37,33 @@ public class ReactiveSecurityAutoConfigurationTests {
3437
private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner();
3538

3639
@Test
37-
public void importsConfigurationThatEnablesWebFluxSecurity() {
40+
public void backsOffWhenWebFilterChainProxyBeanPresent() {
41+
this.contextRunner
42+
.withConfiguration(
43+
AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class))
44+
.withUserConfiguration(WebFilterChainProxyConfiguration.class)
45+
.run((context) -> assertThat(context)
46+
.hasSingleBean(WebFilterChainProxy.class));
47+
}
48+
49+
@Test
50+
public void enablesWebFluxSecurity() {
3851
this.contextRunner
3952
.withConfiguration(
4053
AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class,
4154
ReactiveUserDetailsServiceAutoConfiguration.class))
42-
.run((context) -> {
43-
assertThat(context).getBean(WebFilterChainProxy.class).isNotNull();
44-
assertThat(context).getBean(WebFluxSecurityConfiguration.class)
45-
.isNotNull();
46-
assertThat(context).getBean(WebFilterChainProxy.class).isNotNull();
47-
});
55+
.run((context) -> assertThat(context).getBean(WebFilterChainProxy.class)
56+
.isNotNull());
57+
}
58+
59+
@Configuration
60+
static class WebFilterChainProxyConfiguration {
61+
62+
@Bean
63+
public WebFilterChainProxy webFilterChainProxy() {
64+
return mock(WebFilterChainProxy.class);
65+
}
66+
4867
}
4968

5069
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/reactive/WebFluxSecurityConfigurationTests.java

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)