|
|
|
@ -165,6 +165,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
doFilterInternal(request, response, filterChain); |
|
|
|
doFilterInternal(request, response, filterChain); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Hide "Forwarded" or "X-Forwarded-*" headers. |
|
|
|
* Hide "Forwarded" or "X-Forwarded-*" headers. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@ -235,7 +236,6 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
|
|
|
|
|
|
|
|
private final ForwardedPrefixExtractor forwardedPrefixExtractor; |
|
|
|
private final ForwardedPrefixExtractor forwardedPrefixExtractor; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ForwardedHeaderExtractingRequest(HttpServletRequest servletRequest) { |
|
|
|
ForwardedHeaderExtractingRequest(HttpServletRequest servletRequest) { |
|
|
|
super(servletRequest); |
|
|
|
super(servletRequest); |
|
|
|
|
|
|
|
|
|
|
|
@ -252,11 +252,12 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
|
|
|
|
|
|
|
|
this.remoteAddress = ForwardedHeaderUtils.parseForwardedFor(uri, headers, request.getRemoteAddress()); |
|
|
|
this.remoteAddress = ForwardedHeaderUtils.parseForwardedFor(uri, headers, request.getRemoteAddress()); |
|
|
|
|
|
|
|
|
|
|
|
String baseUrl = this.scheme + "://" + this.host + (port == -1 ? "" : ":" + port); |
|
|
|
// Use Supplier as Tomcat updates delegate request on FORWARD
|
|
|
|
Supplier<HttpServletRequest> delegateRequest = () -> (HttpServletRequest) getRequest(); |
|
|
|
Supplier<HttpServletRequest> requestSupplier = () -> (HttpServletRequest) getRequest(); |
|
|
|
this.forwardedPrefixExtractor = new ForwardedPrefixExtractor(delegateRequest, baseUrl); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.forwardedPrefixExtractor = new ForwardedPrefixExtractor( |
|
|
|
|
|
|
|
requestSupplier, (this.scheme + "://" + this.host + (port == -1 ? "" : ":" + port))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
@ -335,22 +336,22 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
|
|
|
|
|
|
|
|
private String requestUrl; |
|
|
|
private String requestUrl; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Constructor with required information. |
|
|
|
* Constructor with required information. |
|
|
|
* @param delegateRequest supplier for the current |
|
|
|
* @param delegate supplier for the current |
|
|
|
* {@link HttpServletRequestWrapper#getRequest() delegate request} which |
|
|
|
* {@link HttpServletRequestWrapper#getRequest() delegate request} which |
|
|
|
* may change during a forward (e.g. Tomcat. |
|
|
|
* may change during a forward (e.g. Tomcat. |
|
|
|
* @param baseUrl the host, scheme, and port based on forwarded headers |
|
|
|
* @param baseUrl the host, scheme, and port based on forwarded headers |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public ForwardedPrefixExtractor(Supplier<HttpServletRequest> delegateRequest, String baseUrl) { |
|
|
|
public ForwardedPrefixExtractor(Supplier<HttpServletRequest> delegate, String baseUrl) { |
|
|
|
this.delegate = delegateRequest; |
|
|
|
this.delegate = delegate; |
|
|
|
this.baseUrl = baseUrl; |
|
|
|
this.baseUrl = baseUrl; |
|
|
|
this.actualRequestUri = delegateRequest.get().getRequestURI(); |
|
|
|
this.actualRequestUri = delegate.get().getRequestURI(); |
|
|
|
|
|
|
|
|
|
|
|
this.forwardedPrefix = initForwardedPrefix(delegateRequest.get()); |
|
|
|
// Keep call order
|
|
|
|
|
|
|
|
this.forwardedPrefix = initForwardedPrefix(delegate.get()); |
|
|
|
this.requestUri = initRequestUri(); |
|
|
|
this.requestUri = initRequestUri(); |
|
|
|
this.requestUrl = initRequestUrl(); // Keep the order: depends on requestUri
|
|
|
|
this.requestUrl = initRequestUrl(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
@ -388,7 +389,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private String initRequestUrl() { |
|
|
|
private String initRequestUrl() { |
|
|
|
return this.baseUrl + (this.requestUri != null ? this.requestUri : this.delegate.get().getRequestURI()); |
|
|
|
return (this.baseUrl + (this.requestUri != null ? this.requestUri : this.delegate.get().getRequestURI())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -410,11 +411,12 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void recalculatePathsIfNecessary() { |
|
|
|
private void recalculatePathsIfNecessary() { |
|
|
|
|
|
|
|
// Path of delegate request changed, e.g. FORWARD on Tomcat
|
|
|
|
if (!this.actualRequestUri.equals(this.delegate.get().getRequestURI())) { |
|
|
|
if (!this.actualRequestUri.equals(this.delegate.get().getRequestURI())) { |
|
|
|
// Underlying path change (e.g. Servlet FORWARD).
|
|
|
|
|
|
|
|
this.actualRequestUri = this.delegate.get().getRequestURI(); |
|
|
|
this.actualRequestUri = this.delegate.get().getRequestURI(); |
|
|
|
|
|
|
|
// Keep call order
|
|
|
|
this.requestUri = initRequestUri(); |
|
|
|
this.requestUri = initRequestUri(); |
|
|
|
this.requestUrl = initRequestUrl(); // Keep the order: depends on requestUri
|
|
|
|
this.requestUrl = initRequestUrl(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -426,13 +428,11 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { |
|
|
|
|
|
|
|
|
|
|
|
private final HttpServletRequest request; |
|
|
|
private final HttpServletRequest request; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ForwardedHeaderExtractingResponse(HttpServletResponse response, HttpServletRequest request) { |
|
|
|
ForwardedHeaderExtractingResponse(HttpServletResponse response, HttpServletRequest request) { |
|
|
|
super(response); |
|
|
|
super(response); |
|
|
|
this.request = request; |
|
|
|
this.request = request; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void sendRedirect(String location) throws IOException { |
|
|
|
public void sendRedirect(String location) throws IOException { |
|
|
|
|
|
|
|
|
|
|
|
|