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容器中。