@Slf4j
@Component
public class TokenHeaderFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
try {
HttpHeaders headers = exchange.getRequest().getHeaders();
String cat2Token = headers.getFirst(HttpHeaderCodeEnum.AUTH_TOKEN.code);
if (Optional.ofNullable(cat2Token).isPresent()) {
// get user guid
JSONObject tokenJson = SignedJWT.parse(cat2Token).getPayload().toJSONObject();
if (tokenJson.containsKey("sub")) {
// set header
exchange.getResponse().getHeaders().add("guid", tokenJson.getAsString("sub"));
}
}
} catch (ParseException e) {
log.error("gateway get jwt error");
}
//把新的 exchange放回到过滤链
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -200;
}
}
order 表示加载级别
filter可以实现header里面加参数