mirror of
				https://github.com/spring-projects/spring-security.git
				synced 2025-10-30 22:28:46 +00:00 
			
		
		
		
	EnableWebFluxSecurityTests uses SpringTestRule
This will hopefully resolve the periodic failures in EnableWebFluxSecurityTests
This commit is contained in:
		
							parent
							
								
									9d46af3d7c
								
							
						
					
					
						commit
						d231441cc0
					
				| @ -16,9 +16,8 @@ | ||||
| 
 | ||||
| package org.springframework.security.config.annotation.web.reactive; | ||||
| 
 | ||||
| import org.junit.Rule; | ||||
| import org.junit.Test; | ||||
| import org.junit.experimental.runners.Enclosed; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.core.Ordered; | ||||
| @ -26,18 +25,18 @@ import org.springframework.core.annotation.Order; | ||||
| import org.springframework.core.io.buffer.DataBuffer; | ||||
| import org.springframework.core.io.buffer.DefaultDataBufferFactory; | ||||
| import org.springframework.security.authentication.TestingAuthenticationToken; | ||||
| import org.springframework.security.config.test.SpringTestRule; | ||||
| import org.springframework.security.config.web.server.ServerHttpSecurity; | ||||
| import org.springframework.security.core.Authentication; | ||||
| import org.springframework.security.core.userdetails.MapReactiveUserDetailsService; | ||||
| import org.springframework.security.core.userdetails.User; | ||||
| import org.springframework.security.core.userdetails.ReactiveUserDetailsService; | ||||
| import org.springframework.security.core.userdetails.User; | ||||
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||||
| import org.springframework.security.crypto.password.PasswordEncoder; | ||||
| import org.springframework.security.test.web.reactive.server.WebTestClientBuilder; | ||||
| import org.springframework.security.web.server.SecurityWebFilterChain; | ||||
| import org.springframework.security.web.server.WebFilterChainProxy; | ||||
| import org.springframework.security.web.server.util.matcher.PathPatternParserServerWebExchangeMatcher; | ||||
| import org.springframework.test.context.junit4.SpringRunner; | ||||
| import org.springframework.test.web.reactive.server.FluxExchangeResult; | ||||
| import org.springframework.test.web.reactive.server.WebTestClient; | ||||
| import org.springframework.util.LinkedMultiValueMap; | ||||
| @ -56,14 +55,17 @@ import static org.springframework.web.reactive.function.client.ExchangeFilterFun | ||||
|  * @author Rob Winch | ||||
|  * @since 5.0 | ||||
|  */ | ||||
| @RunWith(Enclosed.class) | ||||
| public class EnableWebFluxSecurityTests { | ||||
| 	@RunWith(SpringRunner.class) | ||||
| 	public static class Defaults { | ||||
| 		@Autowired WebFilterChainProxy springSecurityFilterChain; | ||||
| 	@Rule | ||||
| 	public final SpringTestRule spring = new SpringTestRule(); | ||||
| 
 | ||||
| 	@Autowired | ||||
| 	WebFilterChainProxy springSecurityFilterChain; | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultRequiresAuthentication() { | ||||
| 		this.spring.register(Config.class).autowire(); | ||||
| 
 | ||||
| 		WebTestClient client = WebTestClientBuilder | ||||
| 			.bindToWebFilters(this.springSecurityFilterChain) | ||||
| 			.build(); | ||||
| @ -77,6 +79,8 @@ public class EnableWebFluxSecurityTests { | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void authenticateWhenBasicThenNoSession() { | ||||
| 		this.spring.register(Config.class).autowire(); | ||||
| 
 | ||||
| 		WebTestClient client = WebTestClientBuilder | ||||
| 			.bindToWebFilters(this.springSecurityFilterChain) | ||||
| 			.filter(basicAuthentication()) | ||||
| @ -92,6 +96,7 @@ public class EnableWebFluxSecurityTests { | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultPopulatesReactorContext() { | ||||
| 		this.spring.register(Config.class).autowire(); | ||||
| 		Principal currentPrincipal = new TestingAuthenticationToken("user", "password", "ROLE_USER"); | ||||
| 		WebTestClient client = WebTestClientBuilder.bindToWebFilters( | ||||
| 			(exchange, chain) -> | ||||
| @ -114,6 +119,7 @@ public class EnableWebFluxSecurityTests { | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultPopulatesReactorContextWhenAuthenticating() { | ||||
| 		this.spring.register(Config.class).autowire(); | ||||
| 		WebTestClient client = WebTestClientBuilder.bindToWebFilters( | ||||
| 			this.springSecurityFilterChain, | ||||
| 			(exchange,chain) -> | ||||
| @ -145,14 +151,10 @@ public class EnableWebFluxSecurityTests { | ||||
| 			); | ||||
| 		} | ||||
| 	} | ||||
| 	} | ||||
| 
 | ||||
| 	@RunWith(SpringRunner.class) | ||||
| 	public static class CustomPasswordEncoder { | ||||
| 		@Autowired WebFilterChainProxy springSecurityFilterChain; | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void passwordEncoderBeanIsUsed() { | ||||
| 		this.spring.register(CustomPasswordEncoderConfig.class).autowire(); | ||||
| 		WebTestClient client = WebTestClientBuilder.bindToWebFilters( | ||||
| 			this.springSecurityFilterChain, | ||||
| 			(exchange,chain) -> | ||||
| @ -174,7 +176,7 @@ public class EnableWebFluxSecurityTests { | ||||
| 	} | ||||
| 
 | ||||
| 	@EnableWebFluxSecurity | ||||
| 		static class Config { | ||||
| 	static class CustomPasswordEncoderConfig { | ||||
| 		@Bean | ||||
| 		public ReactiveUserDetailsService userDetailsRepository(PasswordEncoder encoder) { | ||||
| 			return new MapReactiveUserDetailsService(User.withUsername("user") | ||||
| @ -189,14 +191,10 @@ public class EnableWebFluxSecurityTests { | ||||
| 			return new BCryptPasswordEncoder(); | ||||
| 		} | ||||
| 	} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	@RunWith(SpringRunner.class) | ||||
| 	public static class FormLoginTests { | ||||
| 		@Autowired WebFilterChainProxy springSecurityFilterChain; | ||||
| 	@Test | ||||
| 	public void formLoginWorks() { | ||||
| 		this.spring.register(Config.class).autowire(); | ||||
| 		WebTestClient client = WebTestClientBuilder.bindToWebFilters( | ||||
| 			this.springSecurityFilterChain, | ||||
| 			(exchange,chain) -> | ||||
| @ -220,25 +218,9 @@ public class EnableWebFluxSecurityTests { | ||||
| 			.expectHeader().valueMatches("Location", "/"); | ||||
| 	} | ||||
| 
 | ||||
| 		@EnableWebFluxSecurity | ||||
| 		static class Config { | ||||
| 			@Bean | ||||
| 			public ReactiveUserDetailsService userDetailsRepository() { | ||||
| 				return new MapReactiveUserDetailsService(User.withUsername("user") | ||||
| 					.password("password") | ||||
| 					.roles("USER") | ||||
| 					.build() | ||||
| 				); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@RunWith(SpringRunner.class) | ||||
| 	public static class MultiServerHttpSecurity { | ||||
| 		@Autowired WebFilterChainProxy springSecurityFilterChain; | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void multiWorks() { | ||||
| 		this.spring.register(MultiSecurityHttpConfig.class).autowire(); | ||||
| 		WebTestClient client = WebTestClientBuilder.bindToWebFilters(this.springSecurityFilterChain).build(); | ||||
| 
 | ||||
| 		client.get() | ||||
| @ -254,30 +236,21 @@ public class EnableWebFluxSecurityTests { | ||||
| 	} | ||||
| 
 | ||||
| 	@EnableWebFluxSecurity | ||||
| 		static class Config { | ||||
| 			@Order(Ordered.HIGHEST_PRECEDENCE) | ||||
| 			@Bean | ||||
| 			public SecurityWebFilterChain apiHttpSecurity(ServerHttpSecurity http) { | ||||
| 				http | ||||
| 					.securityMatcher(new PathPatternParserServerWebExchangeMatcher("/api/**")) | ||||
| 					.authorizeExchange() | ||||
| 						.anyExchange().denyAll(); | ||||
| 	static class MultiSecurityHttpConfig { | ||||
| 		@Order(Ordered.HIGHEST_PRECEDENCE) @Bean public SecurityWebFilterChain apiHttpSecurity( | ||||
| 			ServerHttpSecurity http) { | ||||
| 			http.securityMatcher(new PathPatternParserServerWebExchangeMatcher("/api/**")) | ||||
| 				.authorizeExchange().anyExchange().denyAll(); | ||||
| 			return http.build(); | ||||
| 		} | ||||
| 
 | ||||
| 			@Bean | ||||
| 			public SecurityWebFilterChain httpSecurity(ServerHttpSecurity http) { | ||||
| 		@Bean public SecurityWebFilterChain httpSecurity(ServerHttpSecurity http) { | ||||
| 			return http.build(); | ||||
| 		} | ||||
| 
 | ||||
| 			@Bean | ||||
| 			public ReactiveUserDetailsService userDetailsRepository() { | ||||
| 				return new MapReactiveUserDetailsService(User.withUsername("user") | ||||
| 					.password("password") | ||||
| 					.roles("USER") | ||||
| 					.build() | ||||
| 				); | ||||
| 			} | ||||
| 		@Bean public ReactiveUserDetailsService userDetailsRepository() { | ||||
| 			return new MapReactiveUserDetailsService( | ||||
| 				User.withUsername("user").password("password").roles("USER").build()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user