WebFilterChainFilter -> WebFilterChainProxy

Issue gh-4615
This commit is contained in:
Rob Winch 2017-10-10 14:01:49 -05:00
parent cfc5572b7a
commit d0de8d40dd
7 changed files with 23 additions and 33 deletions

View File

@ -23,7 +23,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.security.config.web.server.HttpSecurity; import org.springframework.security.config.web.server.HttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain; import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainProxy;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.Arrays; import java.util.Arrays;
@ -49,8 +49,8 @@ public class WebFluxSecurityConfiguration {
@Bean(SPRING_SECURITY_WEBFILTERCHAINFILTER_BEAN_NAME) @Bean(SPRING_SECURITY_WEBFILTERCHAINFILTER_BEAN_NAME)
@Order(value = WEB_FILTER_CHAIN_FILTER_ORDER) @Order(value = WEB_FILTER_CHAIN_FILTER_ORDER)
public WebFilterChainFilter springSecurityWebFilterChainFilter() { public WebFilterChainProxy springSecurityWebFilterChainFilter() {
return WebFilterChainFilter.fromSecurityWebFilterChainsList(getSecurityWebFilterChains()); return WebFilterChainProxy.fromSecurityWebFilterChainsList(getSecurityWebFilterChains());
} }
private List<SecurityWebFilterChain> getSecurityWebFilterChains() { private List<SecurityWebFilterChain> getSecurityWebFilterChains() {

View File

@ -35,7 +35,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder; import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
import org.springframework.security.web.server.SecurityWebFilterChain; import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainProxy;
import org.springframework.security.web.server.util.matcher.PathPatternParserServerWebExchangeMatcher; import org.springframework.security.web.server.util.matcher.PathPatternParserServerWebExchangeMatcher;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.FluxExchangeResult; import org.springframework.test.web.reactive.server.FluxExchangeResult;
@ -60,8 +60,7 @@ import static org.springframework.web.reactive.function.client.ExchangeFilterFun
public class EnableWebFluxSecurityTests { public class EnableWebFluxSecurityTests {
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public static class Defaults { public static class Defaults {
@Autowired @Autowired WebFilterChainProxy springSecurityFilterChain;
WebFilterChainFilter springSecurityFilterChain;
@Test @Test
public void defaultRequiresAuthentication() { public void defaultRequiresAuthentication() {
@ -150,8 +149,7 @@ public class EnableWebFluxSecurityTests {
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public static class CustomPasswordEncoder { public static class CustomPasswordEncoder {
@Autowired @Autowired WebFilterChainProxy springSecurityFilterChain;
WebFilterChainFilter springSecurityFilterChain;
@Test @Test
public void passwordEncoderBeanIsUsed() { public void passwordEncoderBeanIsUsed() {
@ -196,8 +194,7 @@ public class EnableWebFluxSecurityTests {
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public static class FormLoginTests { public static class FormLoginTests {
@Autowired @Autowired WebFilterChainProxy springSecurityFilterChain;
WebFilterChainFilter springSecurityFilterChain;
@Test @Test
public void formLoginWorks() { public void formLoginWorks() {
WebTestClient client = WebTestClientBuilder.bindToWebFilters( WebTestClient client = WebTestClientBuilder.bindToWebFilters(
@ -238,8 +235,7 @@ public class EnableWebFluxSecurityTests {
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public static class MultiHttpSecurity { public static class MultiHttpSecurity {
@Autowired @Autowired WebFilterChainProxy springSecurityFilterChain;
WebFilterChainFilter springSecurityFilterChain;
@Test @Test
public void multiWorks() { public void multiWorks() {

View File

@ -29,7 +29,7 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.htmlunit.server.WebTestClientHtmlUnitDriverBuilder; import org.springframework.security.htmlunit.server.WebTestClientHtmlUnitDriverBuilder;
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder; import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
import org.springframework.security.web.server.SecurityWebFilterChain; import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainProxy;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -104,7 +104,7 @@ public class FormLoginTests {
WebTestClient webTestClient = WebTestClient WebTestClient webTestClient = WebTestClient
.bindToController(new CustomLoginPageController(), new WebTestClientBuilder.Http200RestController()) .bindToController(new CustomLoginPageController(), new WebTestClientBuilder.Http200RestController())
.webFilter(WebFilterChainFilter.fromSecurityWebFilterChains(securityWebFilter)) .webFilter(WebFilterChainProxy.fromSecurityWebFilterChains(securityWebFilter))
.build(); .build();
WebDriver driver = WebTestClientHtmlUnitDriverBuilder WebDriver driver = WebTestClientHtmlUnitDriverBuilder

View File

@ -25,7 +25,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.security.authentication.ReactiveAuthenticationManager; import org.springframework.security.authentication.ReactiveAuthenticationManager;
import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder; import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainProxy;
import org.springframework.security.web.server.context.SecurityContextRepository; import org.springframework.security.web.server.context.SecurityContextRepository;
import org.springframework.security.web.server.context.WebSessionSecurityContextRepository; import org.springframework.security.web.server.context.WebSessionSecurityContextRepository;
import org.springframework.test.web.reactive.server.EntityExchangeResult; import org.springframework.test.web.reactive.server.EntityExchangeResult;
@ -116,7 +116,7 @@ public class HttpSecurityTests {
} }
private WebTestClient buildClient() { private WebTestClient buildClient() {
WebFilterChainFilter springSecurityFilterChain = WebFilterChainFilter.fromSecurityWebFilterChains( WebFilterChainProxy springSecurityFilterChain = WebFilterChainProxy.fromSecurityWebFilterChains(
this.http.build()); this.http.build());
return WebTestClientBuilder.bindToWebFilters(springSecurityFilterChain).build(); return WebTestClientBuilder.bindToWebFilters(springSecurityFilterChain).build();
} }

View File

@ -24,7 +24,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.test.context.support.WithMockUser; import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainProxy;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
@ -46,8 +46,7 @@ import static org.springframework.web.reactive.function.client.ExchangeFilterFun
public class HelloWebfluxFnApplicationTests { public class HelloWebfluxFnApplicationTests {
@Autowired @Autowired
RouterFunction<?> routerFunction; RouterFunction<?> routerFunction;
@Autowired @Autowired WebFilterChainProxy springSecurityFilterChain;
WebFilterChainFilter springSecurityFilterChain;
WebTestClient rest; WebTestClient rest;

View File

@ -16,12 +16,8 @@
package org.springframework.security.web.server; package org.springframework.security.web.server;
import java.util.Arrays; import java.util.Arrays;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.function.Function;
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcherEntry;
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers; import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
@ -36,10 +32,10 @@ import reactor.core.publisher.Mono;
* @author Rob Winch * @author Rob Winch
* @since 5.0 * @since 5.0
*/ */
public class WebFilterChainFilter implements WebFilter { public class WebFilterChainProxy implements WebFilter {
private final Flux<SecurityWebFilterChain> filters; private final Flux<SecurityWebFilterChain> filters;
public WebFilterChainFilter(Flux<SecurityWebFilterChain> filters) { public WebFilterChainProxy(Flux<SecurityWebFilterChain> filters) {
this.filters = filters; this.filters = filters;
} }
@ -56,15 +52,15 @@ public class WebFilterChainFilter implements WebFilter {
.flatMap( securedChain -> securedChain.filter(exchange)); .flatMap( securedChain -> securedChain.filter(exchange));
} }
public static WebFilterChainFilter fromWebFiltersList(List<WebFilter> filters) { public static WebFilterChainProxy fromWebFiltersList(List<WebFilter> filters) {
return new WebFilterChainFilter(Flux.just(new MatcherSecurityWebFilterChain(ServerWebExchangeMatchers.anyExchange(), filters))); return new WebFilterChainProxy(Flux.just(new MatcherSecurityWebFilterChain(ServerWebExchangeMatchers.anyExchange(), filters)));
} }
public static WebFilterChainFilter fromSecurityWebFilterChainsList(List<SecurityWebFilterChain> securityWebFilterChains) { public static WebFilterChainProxy fromSecurityWebFilterChainsList(List<SecurityWebFilterChain> securityWebFilterChains) {
return new WebFilterChainFilter(Flux.fromIterable(securityWebFilterChains)); return new WebFilterChainProxy(Flux.fromIterable(securityWebFilterChains));
} }
public static WebFilterChainFilter fromSecurityWebFilterChains(SecurityWebFilterChain... securityWebFilterChains) { public static WebFilterChainProxy fromSecurityWebFilterChains(SecurityWebFilterChain... securityWebFilterChains) {
return fromSecurityWebFilterChainsList(Arrays.asList(securityWebFilterChains)); return fromSecurityWebFilterChainsList(Arrays.asList(securityWebFilterChains));
} }
} }

View File

@ -17,14 +17,13 @@ package org.springframework.security.test.web.reactive.server;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.security.web.server.SecurityWebFilterChain; import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainProxy;
import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.web.reactive.server.WebTestClient.Builder; import org.springframework.test.web.reactive.server.WebTestClient.Builder;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
import reactor.core.publisher.Flux;
/** /**
* Provides a convenient mechanism for running {@link WebTestClient} against * Provides a convenient mechanism for running {@link WebTestClient} against
@ -41,7 +40,7 @@ public class WebTestClientBuilder {
} }
public static Builder bindToWebFilters(SecurityWebFilterChain securityWebFilterChain) { public static Builder bindToWebFilters(SecurityWebFilterChain securityWebFilterChain) {
return bindToWebFilters(WebFilterChainFilter.fromSecurityWebFilterChains(securityWebFilterChain)); return bindToWebFilters(WebFilterChainProxy.fromSecurityWebFilterChains(securityWebFilterChain));
} }
@RestController @RestController