exchange.getPrincipal()
転送リクエストに取得するユーザー情報を追加する必要があり、GlobalFilter
以下のように記述します。
public class UserInfoFilter implements GlobalFilter, Ordered {
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest.Builder mutate = exchange.getRequest().mutate();
return exchange.getPrincipal().map(principal -> {
if (principal instanceof Authentication) {
Authentication authentication = (Authentication) principal;
Object principal1 = authentication.getPrincipal();
if (principal1 instanceof UserDetails) {
UserDetails user = (UserDetails) principal1;
mutate.header("userName", user.getUsername());
}
}
return mutate;
}).doOnSuccess(builder -> chain.filter(exchange.mutate().request(builder.build()).build())).then();
}
}
しかし、このフィルターを有効にすると、例外がスローされることなく、200 ステータス コードだけで応答が返されません。私はリアクターの間違った方法を使用していると思います。たくさん試してみましたが、うまくいきません。