From 8e803987158d5d04ef90e193e9d78afe17ee81a0 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Mon, 11 Sep 2017 20:18:13 -0500 Subject: [PATCH] SecurityContextRepository save return Mono --- .../web/server/authentication/AuthenticationWebFilter.java | 2 +- .../web/server/context/SecurityContextRepository.java | 2 +- ...ServerWebExchangeAttributeSecurityContextRepository.java | 6 +++--- .../server/context/WebSessionSecurityContextRepository.java | 4 ++-- ...rWebExchangeAttributeSecurityContextRepositoryTests.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/webflux/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java b/webflux/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java index 5a33aeb521..7321e2951f 100644 --- a/webflux/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java +++ b/webflux/src/main/java/org/springframework/security/web/server/authentication/AuthenticationWebFilter.java @@ -76,7 +76,7 @@ public class AuthenticationWebFilter implements WebFilter { SecurityContextImpl securityContext = new SecurityContextImpl(); securityContext.setAuthentication(authentication); return this.securityContextRepository.save(exchange, securityContext) - .flatMap( wrappedExchange -> this.authenticationSuccessHandler.success(authentication, wrappedExchange, chain)); + .then(this.authenticationSuccessHandler.success(authentication, exchange, chain)); } public void setSecurityContextRepository( diff --git a/webflux/src/main/java/org/springframework/security/web/server/context/SecurityContextRepository.java b/webflux/src/main/java/org/springframework/security/web/server/context/SecurityContextRepository.java index 7d31efa538..48908a81f4 100644 --- a/webflux/src/main/java/org/springframework/security/web/server/context/SecurityContextRepository.java +++ b/webflux/src/main/java/org/springframework/security/web/server/context/SecurityContextRepository.java @@ -24,7 +24,7 @@ import reactor.core.publisher.Mono; public interface SecurityContextRepository { - Mono save(ServerWebExchange exchange, SecurityContext context); + Mono save(ServerWebExchange exchange, SecurityContext context); Mono load(ServerWebExchange exchange); } diff --git a/webflux/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepository.java b/webflux/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepository.java index 908228e96a..54465f153a 100644 --- a/webflux/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepository.java +++ b/webflux/src/main/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepository.java @@ -30,9 +30,9 @@ import reactor.core.publisher.Mono; public class ServerWebExchangeAttributeSecurityContextRepository implements SecurityContextRepository { final String ATTR = "USER"; - public Mono save(ServerWebExchange exchange, SecurityContext context) { - exchange.getAttributes().put(ATTR, context); - return Mono.just(new SecurityContextRepositoryServerWebExchange(exchange, this)); + public Mono save(ServerWebExchange exchange, SecurityContext context) { + return Mono.fromRunnable(() ->exchange.getAttributes().put(ATTR, context)); + } public Mono load(ServerWebExchange exchange) { diff --git a/webflux/src/main/java/org/springframework/security/web/server/context/WebSessionSecurityContextRepository.java b/webflux/src/main/java/org/springframework/security/web/server/context/WebSessionSecurityContextRepository.java index db05cff0db..8fab72c465 100644 --- a/webflux/src/main/java/org/springframework/security/web/server/context/WebSessionSecurityContextRepository.java +++ b/webflux/src/main/java/org/springframework/security/web/server/context/WebSessionSecurityContextRepository.java @@ -30,10 +30,10 @@ import reactor.core.publisher.Mono; public class WebSessionSecurityContextRepository implements SecurityContextRepository { final String SESSION_ATTR = "USER"; - public Mono save(ServerWebExchange exchange, SecurityContext context) { + public Mono save(ServerWebExchange exchange, SecurityContext context) { return exchange.getSession() .doOnNext(session -> session.getAttributes().put(SESSION_ATTR, context)) - .flatMap( session -> Mono.just(new SecurityContextRepositoryServerWebExchange(exchange, this))); + .then(); } public Mono load(ServerWebExchange exchange) { diff --git a/webflux/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepositoryTests.java b/webflux/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepositoryTests.java index 39f595abe3..f4bb4e20d4 100644 --- a/webflux/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepositoryTests.java +++ b/webflux/src/test/java/org/springframework/security/web/server/context/ServerWebExchangeAttributeSecurityContextRepositoryTests.java @@ -38,7 +38,7 @@ public class ServerWebExchangeAttributeSecurityContextRepositoryTests { @Test public void saveAndLoad() { SecurityContext context = new SecurityContextImpl(); - this.repository.save(this.exchange, context); + this.repository.save(this.exchange, context).block(); Mono loaded = this.repository.load(this.exchange);