Jetty代理Servlet:处理重定向

时间:2015-10-30 08:09:24

标签: proxy jetty embedded-jetty http-proxy

如果来自服务器的响应是重定向,即具有位置标头的302状态,则Jetty的ProxyServlet不处理该控制,并且控件重定向到原始服务器。我该如何解决这个问题?另外,我如何更改响应和响应标头?

1 个答案:

答案 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);
}