如果来自服务器的响应是重定向,即带有位置标头的302状态,Jetty的ProxyServlet不会处理此问题,控件将重定向到原始服务器。我该如何解决此问题?此外,我如何更改响应和响应标头?
您可以重写ProxyServlet
中允许重写头的方法。因此,例如,您可以查看是否有Location
标头,如果有,请删除目标URL并将其替换为客户端请求的URL。我就是这样做的:
@Override
protected String filterServerResponseHeader(HttpServletRequest clientRequest, Response serverResponse, String headerName, String headerValue) {
if (headerName.equalsIgnoreCase("location")) {
URI targetUri = serverResponse.getRequest().getURI();
String toReplace = targetUri.getScheme() + "://" + targetUri.getAuthority();
if (headerValue.startsWith(toReplace)) {
headerValue = clientRequest.getScheme() + "://" + clientRequest.getHeader("host")
+ headerValue.substring(toReplace.length());
log.info("Rewrote location header to " + headerValue);
return headerValue;
}
}
return super.filterServerResponseHeader(clientRequest, serverResponse, headerName, headerValue);
}