package org.dromara.gateway.filter;
|
|
import cn.dev33.satoken.SaManager;
|
import cn.dev33.satoken.same.SaSameUtil;
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
import org.springframework.core.Ordered;
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.server.ServerWebExchange;
|
import reactor.core.publisher.Mono;
|
|
/**
|
* 转发认证过滤器(内部服务外网隔离)
|
*
|
* @author Lion Li
|
*/
|
@Component
|
public class ForwardAuthFilter implements GlobalFilter, Ordered {
|
@Override
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
// 未开启配置则直接跳过
|
if (!SaManager.getConfig().getCheckSameToken()) {
|
return chain.filter(exchange);
|
}
|
ServerHttpRequest newRequest = exchange
|
.getRequest()
|
.mutate()
|
// 为请求追加 Same-Token 参数
|
.header(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken())
|
.build();
|
ServerWebExchange newExchange = exchange.mutate().request(newRequest).build();
|
return chain.filter(newExchange);
|
}
|
|
@Override
|
public int getOrder() {
|
return -100;
|
}
|
}
|