diff --git a/config/src/main/java/org/springframework/security/config/web/server/HttpSecurity.java b/config/src/main/java/org/springframework/security/config/web/server/HttpSecurity.java index cd6d654628..7e774bfe37 100644 --- a/config/src/main/java/org/springframework/security/config/web/server/HttpSecurity.java +++ b/config/src/main/java/org/springframework/security/config/web/server/HttpSecurity.java @@ -69,7 +69,7 @@ public class HttpSecurity { return this; } - public WebFilter build() { + public WebFilterChainFilter build() { List filters = new ArrayList<>(); if(headers != null) { filters.add(headers.build()); diff --git a/samples/javaconfig/hellowebflux/src/main/java/sample/SecurityConfig.java b/samples/javaconfig/hellowebflux/src/main/java/sample/SecurityConfig.java index 2897de6361..c4a08b9fc5 100644 --- a/samples/javaconfig/hellowebflux/src/main/java/sample/SecurityConfig.java +++ b/samples/javaconfig/hellowebflux/src/main/java/sample/SecurityConfig.java @@ -26,8 +26,8 @@ import org.springframework.security.config.web.server.HttpSecurity; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.authorization.AuthorizationContext; -import org.springframework.web.server.WebFilter; import reactor.core.publisher.Mono; /** @@ -38,7 +38,7 @@ import reactor.core.publisher.Mono; public class SecurityConfig { @Bean - WebFilter springSecurityFilterChain(HttpSecurity http) throws Exception { + WebFilterChainFilter springSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeExchange() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/users/{user}/**").access(this::currentUserMatchesPath) diff --git a/samples/javaconfig/hellowebfluxfn/src/main/java/sample/HelloWebfluxFnApplication.java b/samples/javaconfig/hellowebfluxfn/src/main/java/sample/HelloWebfluxFnApplication.java index 79372c09fb..b38ab617eb 100644 --- a/samples/javaconfig/hellowebfluxfn/src/main/java/sample/HelloWebfluxFnApplication.java +++ b/samples/javaconfig/hellowebfluxfn/src/main/java/sample/HelloWebfluxFnApplication.java @@ -58,15 +58,18 @@ public class HelloWebfluxFnApplication { } @Bean - public HttpHandler httpHandler(UserController userController, WebFilter springSecurityFilterChain) { - RouterFunction route = route( - GET("/principal"), userController::principal).andRoute( - GET("/admin"), userController::admin); - + public RouterFunction routes(UserController userController) { + return route( + GET("/principal"), userController::principal).andRoute( + GET("/admin"), userController::admin); + } + @Bean + public HttpHandler httpHandler(RouterFunction routes, WebFilter springSecurityFilterChain) { HandlerStrategies handlerStrategies = HandlerStrategies.builder() - .webFilter(springSecurityFilterChain).build(); + .webFilter(springSecurityFilterChain) + .build(); - return RouterFunctions.toHttpHandler(route, handlerStrategies); + return RouterFunctions.toHttpHandler(routes, handlerStrategies); } } diff --git a/samples/javaconfig/hellowebfluxfn/src/main/java/sample/SecurityConfig.java b/samples/javaconfig/hellowebfluxfn/src/main/java/sample/SecurityConfig.java index 2897de6361..c4a08b9fc5 100644 --- a/samples/javaconfig/hellowebfluxfn/src/main/java/sample/SecurityConfig.java +++ b/samples/javaconfig/hellowebfluxfn/src/main/java/sample/SecurityConfig.java @@ -26,8 +26,8 @@ import org.springframework.security.config.web.server.HttpSecurity; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.authorization.AuthorizationContext; -import org.springframework.web.server.WebFilter; import reactor.core.publisher.Mono; /** @@ -38,7 +38,7 @@ import reactor.core.publisher.Mono; public class SecurityConfig { @Bean - WebFilter springSecurityFilterChain(HttpSecurity http) throws Exception { + WebFilterChainFilter springSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeExchange() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/users/{user}/**").access(this::currentUserMatchesPath) diff --git a/samples/javaconfig/hellowebfluxfn/src/test/java/sample/HelloWebfluxFnApplicationTests.java b/samples/javaconfig/hellowebfluxfn/src/test/java/sample/HelloWebfluxFnApplicationTests.java index f9e7641ee0..8323737494 100644 --- a/samples/javaconfig/hellowebfluxfn/src/test/java/sample/HelloWebfluxFnApplicationTests.java +++ b/samples/javaconfig/hellowebfluxfn/src/test/java/sample/HelloWebfluxFnApplicationTests.java @@ -18,14 +18,13 @@ package sample; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseCookie; -import org.springframework.http.server.reactive.HttpHandler; +import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.header.ContentTypeOptionsHttpHeadersWriter; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; @@ -33,6 +32,7 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.reactive.server.ExchangeResult; import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; +import org.springframework.web.reactive.function.server.RouterFunction; import java.nio.charset.Charset; import java.util.Base64; @@ -49,16 +49,20 @@ import static org.springframework.web.reactive.function.client.ExchangeFilterFun @ActiveProfiles("test") public class HelloWebfluxFnApplicationTests { @Autowired - HttpHandler handler; + RouterFunction routerFunction; + @Autowired + WebFilterChainFilter springSecurityFilterChain; WebTestClient rest; @Before public void setup() { - this.rest = WebTestClient.bindToHttpHandler(handler).build(); + this.rest = WebTestClient + .bindToRouterFunction(routerFunction) + .webFilter(springSecurityFilterChain) + .build(); } - @Test public void basicRequired() throws Exception { this.rest @@ -160,7 +164,6 @@ public class HelloWebfluxFnApplicationTests { .expectStatus().isOk(); } - @Ignore @Test public void mockSupport() throws Exception { this.rest