From 2060125ebd57563a5dbf7234decffd448341a014 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 27 Oct 2017 18:07:46 -0500 Subject: [PATCH] ServerWebExchangeAttributeServerSecurityContextRepository->NoOpNoOpServerSecurityContextRepository Issue: gh-4719 --- .../config/web/server/ServerHttpSecurity.java | 4 ++-- .../authentication/AuthenticationWebFilter.java | 4 ++-- ...a => NoOpServerSecurityContextRepository.java} | 15 +++++++++++---- ...NoOpServerSecurityContextRepositoryTests.java} | 14 +++++++++----- 4 files changed, 24 insertions(+), 13 deletions(-) rename web/src/main/java/org/springframework/security/web/server/context/{ServerWebExchangeAttributeServerSecurityContextRepository.java => NoOpServerSecurityContextRepository.java} (75%) rename web/src/test/java/org/springframework/security/web/server/context/{ServerWebExchangeAttributeServerSecurityContextRepositoryTests.java => NoOpServerSecurityContextRepositoryTests.java} (77%) diff --git a/config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java b/config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java index b2d85e7933..389b75d79f 100644 --- a/config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java +++ b/config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java @@ -47,7 +47,7 @@ import org.springframework.security.web.server.authorization.ExceptionTranslatio import org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter; import org.springframework.security.web.server.context.ReactorContextWebFilter; import org.springframework.security.web.server.context.ServerSecurityContextRepository; -import org.springframework.security.web.server.context.ServerWebExchangeAttributeServerSecurityContextRepository; +import org.springframework.security.web.server.context.NoOpServerSecurityContextRepository; import org.springframework.security.web.server.context.WebSessionServerSecurityContextRepository; import org.springframework.security.web.server.header.CacheControlServerHttpHeadersWriter; import org.springframework.security.web.server.header.CompositeServerHttpHeadersWriter; @@ -347,7 +347,7 @@ public class ServerHttpSecurity { public class HttpBasicBuilder { private ReactiveAuthenticationManager authenticationManager; - private ServerSecurityContextRepository serverSecurityContextRepository = new ServerWebExchangeAttributeServerSecurityContextRepository(); + private ServerSecurityContextRepository serverSecurityContextRepository = NoOpServerSecurityContextRepository.getInstance(); private ServerAuthenticationEntryPoint entryPoint = new HttpBasicServerAuthenticationEntryPoint(); diff --git a/web/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java b/web/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java index cb75d1af37..b019018cf4 100644 --- a/web/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java +++ b/web/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java @@ -26,7 +26,7 @@ import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.web.server.ServerHttpBasicAuthenticationConverter; import org.springframework.security.web.server.WebFilterExchange; import org.springframework.security.web.server.context.ServerSecurityContextRepository; -import org.springframework.security.web.server.context.ServerWebExchangeAttributeServerSecurityContextRepository; +import org.springframework.security.web.server.context.NoOpServerSecurityContextRepository; import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher; import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers; import org.springframework.util.Assert; @@ -49,7 +49,7 @@ public class AuthenticationWebFilter implements WebFilter { private ServerAuthenticationFailureHandler serverAuthenticationFailureHandler = new ServerAuthenticationEntryPointFailureHandler(new HttpBasicServerAuthenticationEntryPoint()); - private ServerSecurityContextRepository serverSecurityContextRepository = new ServerWebExchangeAttributeServerSecurityContextRepository(); + private ServerSecurityContextRepository serverSecurityContextRepository = NoOpServerSecurityContextRepository.getInstance(); private ServerWebExchangeMatcher requiresAuthenticationMatcher = ServerWebExchangeMatchers.anyExchange(); public AuthenticationWebFilter(ReactiveAuthenticationManager authenticationManager) { diff --git a/web/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeServerSecurityContextRepository.java b/web/src/main/java/org/springframework/security/web/server/context/NoOpServerSecurityContextRepository.java similarity index 75% rename from web/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeServerSecurityContextRepository.java rename to web/src/main/java/org/springframework/security/web/server/context/NoOpServerSecurityContextRepository.java index ac7f10e942..2589eeb393 100644 --- a/web/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeServerSecurityContextRepository.java +++ b/web/src/main/java/org/springframework/security/web/server/context/NoOpServerSecurityContextRepository.java @@ -25,16 +25,23 @@ import reactor.core.publisher.Mono; * @author Rob Winch * @since 5.0 */ -public class ServerWebExchangeAttributeServerSecurityContextRepository +public class NoOpServerSecurityContextRepository implements ServerSecurityContextRepository { - final String ATTR = "USER"; + + private static final NoOpServerSecurityContextRepository INSTANCE = new NoOpServerSecurityContextRepository(); public Mono save(ServerWebExchange exchange, SecurityContext context) { - return Mono.fromRunnable(() ->exchange.getAttributes().put(ATTR, context)); + return Mono.empty(); } public Mono load(ServerWebExchange exchange) { - return Mono.justOrEmpty(exchange.getAttribute(ATTR)); + return Mono.empty(); + } + + public static NoOpServerSecurityContextRepository getInstance() { + return INSTANCE; } + + private NoOpServerSecurityContextRepository() {} } diff --git a/web/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeServerSecurityContextRepositoryTests.java b/web/src/test/java/org/springframework/security/web/server/context/NoOpServerSecurityContextRepositoryTests.java similarity index 77% rename from web/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeServerSecurityContextRepositoryTests.java rename to web/src/test/java/org/springframework/security/web/server/context/NoOpServerSecurityContextRepositoryTests.java index 4b5d213b0c..4ef92a2757 100644 --- a/web/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeServerSecurityContextRepositoryTests.java +++ b/web/src/test/java/org/springframework/security/web/server/context/NoOpServerSecurityContextRepositoryTests.java @@ -23,6 +23,7 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; import static org.assertj.core.api.Assertions.assertThat; @@ -30,18 +31,21 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Rob Winch * @since 5.0 */ -public class ServerWebExchangeAttributeServerSecurityContextRepositoryTests { - ServerWebExchangeAttributeServerSecurityContextRepository repository = new ServerWebExchangeAttributeServerSecurityContextRepository(); +public class NoOpServerSecurityContextRepositoryTests { + NoOpServerSecurityContextRepository repository = NoOpServerSecurityContextRepository.getInstance(); + ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/").build()); @Test public void saveAndLoad() { SecurityContext context = new SecurityContextImpl(); - this.repository.save(this.exchange, context).block(); - Mono loaded = this.repository.load(this.exchange); + Mono result = + this.repository.save(this.exchange, context) + .then(this.repository.load(this.exchange)); - assertThat(context).isSameAs(loaded.block()); + StepVerifier.create(result) + .verifyComplete(); } }