mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-05-07 05:36:21 +08:00
refactor: 优化上下文传递
This commit is contained in:
@@ -10,7 +10,7 @@ import javax.annotation.Nonnull;
|
||||
public class AuthenticationThreadLocalAccessor
|
||||
implements ThreadLocalAccessor<Authentication> {
|
||||
|
||||
static final String KEY = "cp.hs.auth";
|
||||
static final Object KEY = Authentication.class;
|
||||
|
||||
static {
|
||||
ReactiveAuthenticationHolder.addSupplier(
|
||||
|
||||
@@ -161,5 +161,11 @@
|
||||
<artifactId>hsweb-easy-orm-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>context-propagation</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.hswebframework.web.i18n;
|
||||
|
||||
import io.micrometer.context.ThreadLocalAccessor;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Locale;
|
||||
|
||||
public class LocaleThreadLocalAccessor implements ThreadLocalAccessor<Locale> {
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public Object key() {
|
||||
return Locale.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Locale getValue() {
|
||||
return LocaleUtils.CONTEXT_THREAD_LOCAL.getIfExists();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue() {
|
||||
LocaleUtils.CONTEXT_THREAD_LOCAL.remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(@Nonnull Locale value) {
|
||||
LocaleUtils.CONTEXT_THREAD_LOCAL.set(value);
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ public final class LocaleUtils {
|
||||
|
||||
public static final Locale DEFAULT_LOCALE = Locale.getDefault();
|
||||
|
||||
private static final FastThreadLocal<Locale> CONTEXT_THREAD_LOCAL = new FastThreadLocal<>();
|
||||
static final FastThreadLocal<Locale> CONTEXT_THREAD_LOCAL = new FastThreadLocal<>();
|
||||
|
||||
static MessageSource messageSource = UnsupportedMessageSource.instance();
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
org.hswebframework.web.i18n.LocaleThreadLocalAccessor
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.hswebframework.web.i18n;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.core.publisher.Hooks;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LocaleThreadLocalAccessorTest {
|
||||
|
||||
static {
|
||||
Hooks.enableAutomaticContextPropagation();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInReactive() {
|
||||
|
||||
for (Locale availableLocale : Locale.getAvailableLocales()) {
|
||||
assertEquals(availableLocale,
|
||||
LocaleUtils.doWith(
|
||||
availableLocale,
|
||||
() -> LocaleUtils
|
||||
.currentReactive()
|
||||
.subscribeOn(Schedulers.boundedElastic())
|
||||
.block()));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user