Browse Source

/*gateway网关对于请求的参数进行了拷贝处理导致过大的参数会异常问题处理。*/

master
htjcAdmin 6 months ago
parent
commit
dcf1718050
3 changed files with 23 additions and 7 deletions
  1. +1
    -0
      inspect-common/inspect-common-security/src/main/java/com/inspect/common/security/handler/GlobalExceptionHandler.java
  2. +3
    -0
      inspect-gateway/src/main/java/com/inspect/gateway/filter/AuthFilter.java
  3. +19
    -7
      inspect-gateway/src/main/java/com/inspect/gateway/filter/RequestParamGlobalFilter.java

+ 1
- 0
inspect-common/inspect-common-security/src/main/java/com/inspect/common/security/handler/GlobalExceptionHandler.java View File

@ -58,6 +58,7 @@ public class GlobalExceptionHandler {
public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
String errStr = String.format("URI[{%s}] Unknown Exception:{%s}", requestURI, e.getMessage());
e.printStackTrace();
log.error(errStr);
return AjaxResult.error(errStr);
}


+ 3
- 0
inspect-gateway/src/main/java/com/inspect/gateway/filter/AuthFilter.java View File

@ -32,10 +32,13 @@ public class AuthFilter implements GlobalFilter, Ordered {
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
final ServerHttpRequest request = exchange.getRequest();
log.info("requestUrlPath: {}, whites: {}", request.getURI().getPath(), ignoreWhite.getWhites());
if (StringUtils.matches(request.getURI().getPath(), ignoreWhite.getWhites())) {
log.info("requestUrlPath: {}, filter ok", request.getURI().getPath());
return chain.filter(exchange);
}
log.info("requestUrlPath: {}, filter next chain", request.getURI().getPath());
String token = getToken(request);
if (StringUtils.isEmpty(token)) {
return unauthorizedResponse(exchange, TokenConst.RESP_TOKEN_NULL);


+ 19
- 7
inspect-gateway/src/main/java/com/inspect/gateway/filter/RequestParamGlobalFilter.java View File

@ -1,5 +1,6 @@
package com.inspect.gateway.filter;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
@ -26,19 +27,26 @@ public class RequestParamGlobalFilter implements GlobalFilter, Ordered {
private Logger logger = LoggerFactory.getLogger(RequestParamGlobalFilter.class);
private static final List<HttpMessageReader<?>> messageReaders = HandlerStrategies.withDefaults().messageReaders();
private static final List<String> PATH_WHITE_LIST = Arrays.asList(
"/patrol/task/add",
"/example/path2"
);
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders headers = request.getHeaders();
MediaType contentType = headers.getContentType();
long contentLength = headers.getContentLength();
final String uriPath = request.getURI().getPath();
return contentLength <= 0L
final String path = request.getURI().getPath();
boolean bWhite = isWhiteListed(path);
if (contentLength <= 0L
|| !MediaType.APPLICATION_JSON.equals(contentType) && !MediaType.APPLICATION_JSON_UTF8.equals(contentType)
|| uriPath.contains("/task/add")
|| uriPath.contains("/task/save")
?
chain.filter(exchange) :
this.readBody(exchange, chain);
|| bWhite) {
logger.info("RequestParamGlobalFilter body transfer omitting, path: {}, bWhite: {}", path, bWhite);
return chain.filter(exchange);
}
return readBody(exchange, chain);
}
private Mono<Void> readBody(ServerWebExchange exchange, GatewayFilterChain chain) {
@ -65,4 +73,8 @@ public class RequestParamGlobalFilter implements GlobalFilter, Ordered {
public int getOrder() {
return Integer.MIN_VALUE;
}
private boolean isWhiteListed(String path) {
return PATH_WHITE_LIST.stream().anyMatch(path::startsWith);
}
}

Loading…
Cancel
Save