Browse Source

优化token获取

zhouhao 3 years ago
parent
commit
7f95784e5b

+ 2 - 1
hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/AuthenticationTests.java

@@ -12,6 +12,7 @@ import org.junit.Test;
 import reactor.core.publisher.Mono;
 import reactor.core.publisher.SignalType;
 import reactor.test.StepVerifier;
+import reactor.util.context.Context;
 
 import java.util.Collections;
 import java.util.Set;
@@ -138,7 +139,7 @@ public class AuthenticationTests {
                 .doOnEach(ReactiveLogger.on(SignalType.ON_NEXT,(ctx,signal)->{
                     System.out.println(ctx);
                 }))
-                .subscriberContext(acceptContext(ctx -> ctx.put(ContextKey.of(ParsedToken.class), parsedToken)))
+                .subscriberContext(Context.of(ParsedToken.class, parsedToken))
                 .subscriberContext(ReactiveLogger.start("rid","1"))
                 .as(StepVerifier::create)
                 .expectNext("admin")

+ 2 - 2
hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/ReactiveUserTokenController.java

@@ -47,8 +47,8 @@ public class ReactiveUserTokenController {
     @Authorize(merge = false)
     @Operation(summary = "重置当前用户的令牌")
     public Mono<Boolean> resetToken() {
-        return ContextUtils.reactiveContext()
-                .map(context -> context.get(ContextKey.of(ParsedToken.class)).orElseThrow(UnAuthorizedException::new))
+        return Mono
+                .<ParsedToken>deferWithContext(ctx -> Mono.justOrEmpty(ctx.getOrEmpty(ParsedToken.class)))
                 .flatMap(token -> userTokenManager.signOutByToken(token.getToken()))
                 .thenReturn(true);
     }

+ 4 - 9
hsweb-authorization/hsweb-authorization-oauth2/src/main/java/org/hswebframework/web/oauth2/server/auth/ReactiveOAuth2AccessTokenParser.java

@@ -47,16 +47,11 @@ public class ReactiveOAuth2AccessTokenParser implements ReactiveUserTokenParser,
 
     @Override
     public Mono<Authentication> get() {
-        return ContextUtils
-                .reactiveContext()
-                .flatMap(context -> context
-                        .get(ContextKey.of(ParsedToken.class))
+        return Mono
+                .deferWithContext(context -> context
+                        .<ParsedToken>getOrEmpty(ParsedToken.class)
                         .filter(token -> "oauth2".equals(token.getType()))
                         .map(t -> accessTokenManager.getAuthenticationByToken(t.getToken()))
-                        .orElse(Mono.empty()))
-                .flatMap(auth -> ReactiveLogger
-                        .mdc("userId", auth.getUser().getId(),
-                             "username", auth.getUser().getName())
-                        .thenReturn(auth));
+                        .orElse(Mono.empty()));
     }
 }