В настоящее время я использую Spring Cloud Gateway, используя пользовательскую аутентификацию JWT. После аутентификации я хочу передать строку токена JWT в заголовке нижестоящей службе с помощью GlobalFilter:
public class AddJwtHeaderGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
Mono<Principal> principal = exchange.getPrincipal();
String jwtString = extract(principal);
ServerHttpRequest request = exchange.getRequest()
.mutate()
.header("Authorization", new String[]{jwtString})
.build();
ServerWebExchange newExchange = exchange.mutate().request(request).build();
return chain.filter(newExchange);
}
// how to implement this method in order to get a String type of jwt token?
private String extract(Mono<Principal> principal) {
//need to call getJwtString(Principal) and return the jwt string
return null;
}
private String getJwtString(Principal principal) {
return principal.getName();
}
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
}
}
Строку токена JWT можно получить, вызвав метод Principal.getName();
Мой вопрос: как я могу реализовать метод String extract(Mono<Principal> principal)
для преобразования строки токена Mono в JWT при добавлении строки токена в качестве заголовка? Или мой способ использования Mono в корне неверен?