mirror of
https://gitee.com/dromara/RuoYi-Cloud-Plus.git
synced 2026-10-06 06:52:58 +08:00
fix 修复 mvc版本网关 X-Forwarded-Prefix 被过滤器删除问题 改为请求头处理的时候添加 避免此问题
This commit is contained in:
@@ -10,15 +10,13 @@ import org.dromara.gateway.filter.support.MutableHttpServletRequest;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 转发请求头过滤器:
|
||||
* 1. 动态透传 X-Forwarded-Prefix
|
||||
* 2. 转发内部 same-token
|
||||
* 1. 转发内部 same-token
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@@ -36,12 +34,6 @@ public class ForwardAuthFilter extends OncePerRequestFilter {
|
||||
throws ServletException, IOException {
|
||||
MutableHttpServletRequest newRequest = null;
|
||||
|
||||
String forwardedPrefix = resolveForwardedPrefix(request);
|
||||
if (forwardedPrefix != null) {
|
||||
newRequest = getOrCreateMutableRequest(request, newRequest);
|
||||
newRequest.putHeader("X-Forwarded-Prefix", forwardedPrefix);
|
||||
}
|
||||
|
||||
if (SaManager.getConfig().getCheckSameToken()) {
|
||||
newRequest = getOrCreateMutableRequest(request, newRequest);
|
||||
newRequest.putHeader(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken());
|
||||
@@ -50,14 +42,6 @@ public class ForwardAuthFilter extends OncePerRequestFilter {
|
||||
filterChain.doFilter(newRequest == null ? request : newRequest, response);
|
||||
}
|
||||
|
||||
private String resolveForwardedPrefix(HttpServletRequest request) {
|
||||
String[] pathSegments = StringUtils.tokenizeToStringArray(request.getRequestURI(), "/");
|
||||
if (pathSegments.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return "/" + pathSegments[0];
|
||||
}
|
||||
|
||||
private MutableHttpServletRequest getOrCreateMutableRequest(HttpServletRequest request,
|
||||
MutableHttpServletRequest currentRequest) {
|
||||
return currentRequest != null ? currentRequest : new MutableHttpServletRequest(request);
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package org.dromara.gateway.filter;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.cloud.gateway.server.mvc.filter.HttpHeadersFilter.RequestHttpHeadersFilter;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.servlet.function.ServerRequest;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Gateway MVC 下游请求头过滤器,补充服务访问前缀。
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Component
|
||||
public class ForwardHeadersFilter implements RequestHttpHeadersFilter, Ordered {
|
||||
|
||||
private static final String X_FORWARDED_PREFIX = "X-Forwarded-Prefix";
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpHeaders apply(HttpHeaders input, ServerRequest request) {
|
||||
String forwardedPrefix = resolveForwardedPrefix(request.servletRequest());
|
||||
if (forwardedPrefix == null) {
|
||||
return input;
|
||||
}
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
for (Map.Entry<String, List<String>> entry : input.headerSet()) {
|
||||
headers.addAll(entry.getKey(), entry.getValue());
|
||||
}
|
||||
headers.set(X_FORWARDED_PREFIX, forwardedPrefix);
|
||||
return headers;
|
||||
}
|
||||
|
||||
private String resolveForwardedPrefix(HttpServletRequest request) {
|
||||
String[] pathSegments = StringUtils.tokenizeToStringArray(request.getRequestURI(), "/");
|
||||
if (pathSegments.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return "/" + pathSegments[0];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user