From 6a12415d23faafa1832125c016dbf014121958bc Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 24 May 2018 09:44:29 -0500 Subject: [PATCH] Add DelegatingServerLogoutHandler(List delegates) Issue: gh-4839 --- .../logout/DelegatingServerLogoutHandler.java | 6 ++++++ .../logout/DelegatingServerLogoutHandlerTests.java | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/web/src/main/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandler.java b/web/src/main/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandler.java index f5813f4bd3..f809f43f17 100644 --- a/web/src/main/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandler.java +++ b/web/src/main/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandler.java @@ -16,6 +16,7 @@ package org.springframework.security.web.server.authentication.logout; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -41,6 +42,11 @@ public class DelegatingServerLogoutHandler implements ServerLogoutHandler { this.delegates = Arrays.asList(delegates); } + public DelegatingServerLogoutHandler(List delegates) { + Assert.notEmpty(delegates, "delegates cannot be null or empty"); + this.delegates = new ArrayList<>(delegates); + } + @Override public Mono logout(WebFilterExchange exchange, Authentication authentication) { Stream> results = this.delegates.stream().map(delegate -> delegate.logout(exchange, authentication)); diff --git a/web/src/test/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandlerTests.java b/web/src/test/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandlerTests.java index ef1a0258ae..4073c636ee 100644 --- a/web/src/test/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandlerTests.java +++ b/web/src/test/java/org/springframework/security/web/server/authentication/logout/DelegatingServerLogoutHandlerTests.java @@ -30,6 +30,8 @@ import org.springframework.security.web.server.WebFilterExchange; import reactor.test.publisher.PublisherProbe; +import java.util.List; + /** * @author Eric Deandrea * @since 5.1 @@ -57,13 +59,21 @@ public class DelegatingServerLogoutHandlerTests { } @Test - public void constructorWhenNullThenIllegalArgumentException() { + public void constructorWhenNullVargsThenIllegalArgumentException() { assertThatThrownBy(() -> new DelegatingServerLogoutHandler((ServerLogoutHandler[]) null)) .isExactlyInstanceOf(IllegalArgumentException.class) .hasMessage("delegates cannot be null or empty") .hasNoCause(); } + @Test + public void constructorWhenNullListThenIllegalArgumentException() { + assertThatThrownBy(() -> new DelegatingServerLogoutHandler((List) null)) + .isExactlyInstanceOf(IllegalArgumentException.class) + .hasMessage("delegates cannot be null or empty") + .hasNoCause(); + } + @Test public void constructorWhenEmptyThenIllegalArgumentException() { assertThatThrownBy(() -> new DelegatingServerLogoutHandler(new ServerLogoutHandler[0]))