fix:gateway ready

This commit is contained in:
zzs 2024-10-31 11:39:20 +08:00
parent 64092f405f
commit 6dfa45b549
5 changed files with 11 additions and 157 deletions

View File

@ -36,7 +36,6 @@ public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
}
@Override
@SuppressWarnings("serial")
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
exchange.getResponse().getHeaders().entrySet().stream()

View File

@ -1,74 +0,0 @@
package com.ensign.ensigngateway.conf;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.util.UriComponentsBuilder;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @Description: TODO
* @Date: 2024/10/30 9:34
* @Created: by ZZSLL
*/
@Slf4j
@Configuration
public class GlobalResponseLogFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 打印请求路径
String path = request.getPath().pathWithinApplication().value();
return chain.filter(exchange).then(
Mono.fromRunnable(() -> {
MultiValueMap<String, String> queryParams = request.getQueryParams();
String requestUrl = UriComponentsBuilder.fromPath(path).queryParams(queryParams).build().toUriString();
// 构建成一条长日志
StringBuilder responseLog = new StringBuilder(200);
// 日志参数
List<Object> responseArgs = new ArrayList<>();
responseLog.append("\n\n================ Gateway Response Start ================\n");
ServerHttpResponse response = exchange.getResponse();
// 状态码个path占位符: 200 get: /xxx/xxx/xxx?a=b
responseLog.append("<=== {} {}: {}\n");
// 参数
String requestMethod = request.getMethod().toString();
responseArgs.add(Objects.requireNonNull(response.getStatusCode()).value());
responseArgs.add(requestMethod);
responseArgs.add(requestUrl);
// 打印请求头
HttpHeaders headers = response.getHeaders();
headers.forEach((headerName, headerValue) -> {
responseLog.append("===Headers=== {}: {}\n");
responseArgs.add(headerName);
responseArgs.add(String.join(StringUtils.join(headerValue.toArray())));
});
responseLog.append("================ Gateway Response End =================\n");
// 打印执行时间
log.info(responseLog.toString(), responseArgs.toArray());
})
);
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}

View File

@ -1,76 +0,0 @@
package com.ensign.ensigngateway.conf;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.util.UriComponentsBuilder;
import reactor.core.publisher.Mono;
import java.net.URI;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
/**
* @Description: TODO
* @Date: 2024/10/30 9:32
* @Created: by ZZSLL
*/
@Slf4j
@Component
public class RequestLogFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 打印请求路径
String path = request.getPath().pathWithinApplication().value();
// 打印请求url
String requestUrl = this.getOriginalRequestUrl(exchange);
// **构建成一条长 日志避免并发下日志错乱**
StringBuilder reqLog = new StringBuilder(200);
// 日志参数
List<Object> reqArgs = new ArrayList<>();
reqLog.append("\n\n================ Gateway Request Start ================\n");
// 打印路由添加占位符
reqLog.append("===> {}: {}\n");
// 参数
String requestMethod = request.getMethod().name();
reqArgs.add(requestMethod);
reqArgs.add(requestUrl);
// 打印请求头
HttpHeaders headers = request.getHeaders();
headers.forEach((headerName, headerValue) -> {
reqLog.append("===Headers=== {}: {}\n");
reqArgs.add(headerName);
});
reqLog.append("================ Gateway Request End =================\n");
// 打印执行时间
log.info(reqLog.toString(), reqArgs.toArray());
return chain.filter(exchange);
}
private String getOriginalRequestUrl(ServerWebExchange exchange) {
ServerHttpRequest request = exchange.getRequest();
LinkedHashSet<URI> uris = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
URI requestUri = uris.stream().findFirst().orElse(request.getURI());
MultiValueMap<String, String> queryParams = request.getQueryParams();
return UriComponentsBuilder.fromPath(requestUri.getRawPath()).queryParams(queryParams).build().toUriString();
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}

View File

@ -4,8 +4,6 @@ spring:
cloud:
gateway:
# globalcors:
# add-to-simple-url-handler-mapping: true
routes:
- id: proxy_route
@ -19,15 +17,13 @@ spring:
uri: http://127.0.0.1:38080
predicates:
- Path=/admin-api/**
filters:
- RewritePath=/admin-api/(?<segment>.*), /${segment}
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
server:
port: 38080
port: 48080
kingdee:
test-public-end-point: 'http://122.4.221.133:8022'
@ -35,3 +31,12 @@ kingdee:
prod-public-end-point: 'http://122.4.221.130:8022'
prod-inner-end-point: 'http://10.64.111.134:8022'
local: 'http://127.0.0.1:38080'
logging:
level:
reactor:
netty:
http:
server:
logging:
AccessLog: INFO

View File

@ -1,5 +1,5 @@
server:
port: 48080
port: 38080
--- #################### 数据库相关配置 ####################
spring: