【发布时间】:2015-10-30 08:09:23
【问题描述】:
如果来自服务器的响应是重定向,即带有 location header 的 302 状态,Jetty 的 ProxyServlet 不会处理该响应,并且控件会重定向到原始服务器。我该如何解决这个问题?另外如何更改响应和响应标头?
【问题讨论】:
标签: proxy jetty embedded-jetty http-proxy
如果来自服务器的响应是重定向,即带有 location header 的 302 状态,Jetty 的 ProxyServlet 不会处理该响应,并且控件会重定向到原始服务器。我该如何解决这个问题?另外如何更改响应和响应标头?
【问题讨论】:
标签: proxy jetty embedded-jetty http-proxy
您可以覆盖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);
}
【讨论】: