From 2dbb9c7cc02af38d3e7d25789e1bf2e3d8dc225b Mon Sep 17 00:00:00 2001 From: zhouhao Date: Mon, 4 Aug 2025 13:55:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E4=BC=A0=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReactiveAuthenticationHolder.java | 4 +--- .../AuthenticationThreadLocalAccessor.java | 10 +++++++++- ...eadLocalReactiveAuthenticationSupplier.java | 18 ++++++++++++++++++ .../AuthenticationThreadLocalAccessorTest.java | 3 ++- 4 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/ThreadLocalReactiveAuthenticationSupplier.java diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/ReactiveAuthenticationHolder.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/ReactiveAuthenticationHolder.java index fb0c1750d..bf95951d0 100644 --- a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/ReactiveAuthenticationHolder.java +++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/ReactiveAuthenticationHolder.java @@ -104,9 +104,7 @@ public final class ReactiveAuthenticationHolder { } Authentication get() { - return auth == null - ? AuthenticationHolder.get().orElse(null) - : auth; + return auth; } } diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessor.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessor.java index b8f4981a8..49c097523 100644 --- a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessor.java +++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessor.java @@ -3,13 +3,21 @@ package org.hswebframework.web.authorization.context; import io.micrometer.context.ThreadLocalAccessor; import org.hswebframework.web.authorization.Authentication; import org.hswebframework.web.authorization.AuthenticationHolder; +import org.hswebframework.web.authorization.ReactiveAuthenticationHolder; import javax.annotation.Nonnull; -public class AuthenticationThreadLocalAccessor implements ThreadLocalAccessor { +public class AuthenticationThreadLocalAccessor + implements ThreadLocalAccessor { static final String KEY = "cp.hs.auth"; + static { + ReactiveAuthenticationHolder.addSupplier( + new ThreadLocalReactiveAuthenticationSupplier() + ); + } + @Override @Nonnull public Object key() { diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/ThreadLocalReactiveAuthenticationSupplier.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/ThreadLocalReactiveAuthenticationSupplier.java new file mode 100644 index 000000000..041f6db08 --- /dev/null +++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/context/ThreadLocalReactiveAuthenticationSupplier.java @@ -0,0 +1,18 @@ +package org.hswebframework.web.authorization.context; + +import org.hswebframework.web.authorization.Authentication; +import org.hswebframework.web.authorization.AuthenticationHolder; +import org.hswebframework.web.authorization.ReactiveAuthenticationSupplier; +import reactor.core.publisher.Mono; + +class ThreadLocalReactiveAuthenticationSupplier implements ReactiveAuthenticationSupplier { + @Override + public Mono get(String userId) { + return Mono.empty(); + } + + @Override + public Mono get() { + return Mono.justOrEmpty(AuthenticationHolder.get()); + } +} diff --git a/hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessorTest.java b/hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessorTest.java index cf61123d0..a1795391b 100644 --- a/hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessorTest.java +++ b/hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/context/AuthenticationThreadLocalAccessorTest.java @@ -26,9 +26,10 @@ class AuthenticationThreadLocalAccessorTest { () -> Authentication .currentReactive() .subscribeOn(Schedulers.boundedElastic()) + .contextCapture() .block()); - assertEquals(auth,auth2); + assertEquals(auth, auth2); } @Test