|
@@ -24,6 +24,7 @@ import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.function.Function;
|
|
|
|
|
|
@Component
|
|
|
@Slf4j
|
|
@@ -40,13 +41,28 @@ public class UserTokenWebFilter implements WebFilter, BeanPostProcessor {
|
|
|
@NonNull
|
|
|
public Mono<Void> filter(@NonNull ServerWebExchange exchange, WebFilterChain chain) {
|
|
|
|
|
|
- return chain.filter(exchange)
|
|
|
- .subscriberContext(ContextUtils.acceptContext(ctx ->
|
|
|
- Flux.fromIterable(parsers)
|
|
|
- .flatMap(parser -> parser.parseToken(exchange))
|
|
|
- .subscribe(token -> ctx.put(ParsedToken.class, token))))
|
|
|
- .subscriberContext(ReactiveLogger.start("requestId", exchange.getRequest().getId()))
|
|
|
- ;
|
|
|
+ return Flux
|
|
|
+ .fromIterable(parsers)
|
|
|
+ .flatMap(parser -> parser.parseToken(exchange))
|
|
|
+ .next()
|
|
|
+ .map(token -> chain
|
|
|
+ .filter(exchange)
|
|
|
+ .subscriberContext(
|
|
|
+ ContextUtils.acceptContext(
|
|
|
+ context -> context.put(ParsedToken.class, token)
|
|
|
+ )
|
|
|
+ ))
|
|
|
+ .defaultIfEmpty(chain.filter(exchange))
|
|
|
+ .flatMap(Function.identity())
|
|
|
+ .subscriberContext(ReactiveLogger.start("requestId", exchange.getRequest().getId()));
|
|
|
+
|
|
|
+// return chain.filter(exchange)
|
|
|
+// .subscriberContext(ContextUtils.acceptContext(ctx ->
|
|
|
+// Flux.fromIterable(parsers)
|
|
|
+// .flatMap(parser -> parser.parseToken(exchange))
|
|
|
+// .subscribe(token -> ctx.put(ParsedToken.class, token)))
|
|
|
+// )
|
|
|
+// .subscriberContext(ReactiveLogger.start("requestId", exchange.getRequest().getId()))
|
|
|
}
|
|
|
|
|
|
@EventListener
|
|
@@ -60,14 +76,17 @@ public class UserTokenWebFilter implements WebFilter, BeanPostProcessor {
|
|
|
if (StringUtils.hasText(token.getToken())) {
|
|
|
event.getResult().put("token", token.getToken());
|
|
|
long expires = event.getParameter("expires")
|
|
|
- .map(String::valueOf)
|
|
|
- .map(Long::parseLong)
|
|
|
- .orElse(token.getTimeout());
|
|
|
+ .map(String::valueOf)
|
|
|
+ .map(Long::parseLong)
|
|
|
+ .orElse(token.getTimeout());
|
|
|
event.getResult().put("expires", expires);
|
|
|
event.async(userTokenManager
|
|
|
- .signIn(token.getToken(), token.getType(), event.getAuthentication().getUser().getId(), expires)
|
|
|
- .doOnNext(t -> log.debug("user [{}] sign in", t.getUserId()))
|
|
|
- .then());
|
|
|
+ .signIn(token.getToken(), token.getType(), event
|
|
|
+ .getAuthentication()
|
|
|
+ .getUser()
|
|
|
+ .getId(), expires)
|
|
|
+ .doOnNext(t -> log.debug("user [{}] sign in", t.getUserId()))
|
|
|
+ .then());
|
|
|
}
|
|
|
}
|
|
|
|