2
0
Эх сурвалжийг харах

Demo mock support with RouterFunction

Rob Winch 8 жил өмнө
parent
commit
bc141febdb

+ 1 - 1
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<WebFilter> filters = new ArrayList<>();
 		if(headers != null) {
 			filters.add(headers.build());

+ 2 - 2
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)

+ 10 - 7
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<ServerResponse> route = route(
-				GET("/principal"), userController::principal).andRoute(
-				GET("/admin"), userController::admin);
-
+	public RouterFunction<ServerResponse> routes(UserController userController) {
+		return route(
+			GET("/principal"), userController::principal).andRoute(
+			GET("/admin"), userController::admin);
+	}
+	@Bean
+	public HttpHandler httpHandler(RouterFunction<ServerResponse> routes, WebFilter springSecurityFilterChain) {
 		HandlerStrategies handlerStrategies = HandlerStrategies.builder()
-			.webFilter(springSecurityFilterChain).build();
+			.webFilter(springSecurityFilterChain)
+			.build();
 
-		return RouterFunctions.toHttpHandler(route, handlerStrategies);
+		return RouterFunctions.toHttpHandler(routes, handlerStrategies);
 	}
 
 }

+ 2 - 2
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)

+ 9 - 6
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