Demo mock support with RouterFunction

This commit is contained in:
Rob Winch 2017-05-23 16:29:30 -05:00
parent a79a81cd24
commit bc141febdb
5 changed files with 24 additions and 18 deletions

View File

@ -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());

View File

@ -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)

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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