如果来自服务器的响应是重定向,即具有位置标头的302状态,则Jetty的ProxyServlet不处理该控制,并且控件重定向到原始服务器。我该如何解决这个问题?另外,我如何更改响应和响应标头?
答案 0 :(得分:0)
您可以覆盖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);
}