Jetty代理Servlet:处理重定向



如果来自服务器的响应是重定向,即带有位置标头的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);
}

最新更新