Java 获取URL中的实际地址而不是代理地址URL

Java 获取URL中的实际地址而不是代理地址URL,java,apache,azure-active-directory,reverse-proxy,mod-proxy,Java,Apache,Azure Active Directory,Reverse Proxy,Mod Proxy,我已经作为example.test.com做了一个web应用程序的反向代理,实际地址是*.*.56,当我点击example.test.com时,它工作正常,但当我添加Office 365身份验证时,我使用httpRequest.getRequestURL()通过Java进行调试命令我需要代理地址,但实际地址为*****.0.56 我尝试使用Java更改URL,但没有成功 String currentUri = httpRequest.getRequestURL().toString(); 我需

我已经作为
example.test.com
做了一个web应用程序的反向代理,实际地址是
*.*.56
,当我点击
example.test.com
时,它工作正常,但当我添加Office 365身份验证时,我使用
httpRequest.getRequestURL()通过Java进行调试命令我需要代理地址,但实际地址为
*****.0.56

我尝试使用Java更改URL,但没有成功

String currentUri = httpRequest.getRequestURL().toString();
我需要在代理服务器中设置任何解决方案来获取我当前URL中的代理地址

我在azure AAD中得到了一个错误,但在反向代理中它是example.test.com


{“错误描述”:“AADSTS70002:验证凭据时出错。AADSTS50011:答复地址“https://*…56:8080/abc/”与答复地址不匹配”https://example.test.com/'请求授权代码时提供。\r\n空间ID:gddsgc97-5667-6574g-9897h-97536vg688\r\n相关ID:565gtdf-j7573-087f-9745a-792835t647\r\n时间戳:2019-01-14 10:09:54Z“错误“:“无效的客户端”}

您可以在请求头
X-Forwarded-host
中获取原始主机名

更新:使用过滤器

@WebFilter(filterName = "RequestURLFilter", urlPatterns = {"/*"})
public class RequestURLFilter implements Filter {
    private FilterConfig filterConfig = null;

    public RequestURLFilter() {
    }    

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
        ServletRequest wrappedRequest
                = new HttpServletRequestWrapper((HttpServletRequest) request) {
            @Override
            public String getServerName() {
                String forwarded = getHeader("X-Forwarded-Host");
                if (forwarded != null) {
                    return forwarded;
                } else {
                    return super.getServerName();
                }
            }

            @Override
            public String getRequestURI() {
                String info = getPathInfo();
                if (info == null) {
                    info = "";
                }
                return getScheme() + "://" + getServerName() + getContextPath()
                        + getServletPath() + info;
            }

            @Override
            public StringBuffer getRequestURL() {
                return new StringBuffer(getRequestURI());
            }
        };
        chain.doFilter(wrappedRequest, response);
    }

    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    @Override
    public void init(FilterConfig filterConfig) {        
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy() {
    }
}

我将从那里获得代理地址,但我希望它是当前的url@shridhar“当前url”是指
httpRequest.getRequestURL()
?@Maurice Perry是的,我刚刚编辑了我的问题,希望它能让你对我的问题有更多的澄清。@shridhar恐怕你需要一个过滤器来做这件事(请参阅上面的我的更新)。您可以将其添加到您的webapp,也可以将其安装到您的servlet容器中。