diff --git a/core/src/main/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategy.java b/core/src/main/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategy.java index 3c5f763fef..1ab3ac9e63 100644 --- a/core/src/main/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategy.java +++ b/core/src/main/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -62,6 +62,32 @@ public final class ListeningSecurityContextHolderStrategy implements SecurityCon private final SecurityContextHolderStrategy delegate; + /** + * Construct a {@link ListeningSecurityContextHolderStrategy} based on + * {@link ThreadLocalSecurityContextHolderStrategy} + * @param listeners the listeners that should be notified when the + * {@link SecurityContext} is {@link #setContext(SecurityContext) set} or + * {@link #clearContext() cleared} + * + * @since 5.7 + */ + public ListeningSecurityContextHolderStrategy(Collection listeners) { + this(new ThreadLocalSecurityContextHolderStrategy(), listeners); + } + + /** + * Construct a {@link ListeningSecurityContextHolderStrategy} based on + * {@link ThreadLocalSecurityContextHolderStrategy} + * @param listeners the listeners that should be notified when the + * {@link SecurityContext} is {@link #setContext(SecurityContext) set} or + * {@link #clearContext() cleared} + * + * @since 5.7 + */ + public ListeningSecurityContextHolderStrategy(SecurityContextChangedListener... listeners) { + this(new ThreadLocalSecurityContextHolderStrategy(), listeners); + } + /** * Construct a {@link ListeningSecurityContextHolderStrategy} * @param listeners the listeners that should be notified when the diff --git a/core/src/test/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategyTests.java b/core/src/test/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategyTests.java index 999fee6fd6..f84cfbc43a 100644 --- a/core/src/test/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategyTests.java +++ b/core/src/test/java/org/springframework/security/core/context/ListeningSecurityContextHolderStrategyTests.java @@ -55,8 +55,8 @@ public class ListeningSecurityContextHolderStrategyTests { @Test public void constructorWhenNullDelegateThenIllegalArgument() { - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> new ListeningSecurityContextHolderStrategy(null, (event) -> { + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy( + () -> new ListeningSecurityContextHolderStrategy((SecurityContextHolderStrategy) null, (event) -> { })); }