feat: gateway config

This commit is contained in:
zzs 2025-03-04 15:15:02 +08:00
parent 4c4349dbb5
commit 5d120f24ff
2 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,84 @@
package com.wmyun.gateway.filter.dev;
import lombok.Data;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import java.net.URI;
import java.util.Arrays;
import java.util.List;
/**
* @Description: TODO
* @Date: 2025/3/4 14:17
* @Created: by ZZSLL
*/
@Component
public class RealIpGatewayFilterFactory extends AbstractGatewayFilterFactory<RealIpGatewayFilterFactory.Config> {
private static final Logger logger = LoggerFactory.getLogger(RealIpGatewayFilterFactory.class);
public RealIpGatewayFilterFactory() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
// 获取 X-Real-IP 的值
ServerHttpRequest request = exchange.getRequest();
String realIp = request.getHeaders().getFirst("X-Real-IP");
logger.info("realIp: {}", realIp);
if (realIp != null) {
// 记录原始请求地址
URI originalUri = request.getURI();
logger.info("Original request URI: {}", originalUri);
String rawQuery = originalUri.getRawQuery();
// 构建新的 URI
URI modifiedUri = URI.create(
originalUri.getScheme() + "://" + realIp + ":" + config.getPort() + originalUri.getRawPath() + (rawQuery != null ? "?" + rawQuery : "")
);
// 记录修改后的请求地址
logger.info("Modified request URI: {}", modifiedUri);
// 修改请求
ServerHttpRequest modifiedRequest = request.mutate()
.uri(modifiedUri)
.build();
return chain.filter(exchange.mutate().request(modifiedRequest).build());
}
// 如果没有 X-Real-IP继续使用原始请求
logger.info("No X-Real-IP header found, using original request URI: {}", request.getURI());
return chain.filter(exchange);
};
}
@Override
public List<String> shortcutFieldOrder() {
return List.of("port");
}
public static class Config {
private int port;
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
}

View File

@ -25,12 +25,14 @@ spring:
- Path=/admin-api/system/**
filters:
- RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
- RealIp=48081
- id: system-app-api # 路由的编号
uri: grayLb://system-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
- Path=/app-api/system/**
filters:
- RewritePath=/app-api/system/v3/api-docs, /v3/api-docs
- RealIp=48081
## infra-server 服务
- id: infra-admin-api # 路由的编号
uri: grayLb://infra-server
@ -38,12 +40,14 @@ spring:
- Path=/admin-api/infra/**
filters:
- RewritePath=/admin-api/infra/v3/api-docs, /v3/api-docs
- RealIp=48082
- id: infra-app-api # 路由的编号
uri: grayLb://infra-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
- Path=/app-api/infra/**
filters:
- RewritePath=/app-api/infra/v3/api-docs, /v3/api-docs
- RealIp=48082
- id: infra-spring-boot-admin # 路由的编号Spring Boot Admin
uri: grayLb://infra-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组