2014-10-28 86 views
1

我有一个简单的XPage,我通过反向代理访问它。 我的问题是现在在服务器端获取正确的URL。使用反向代理获取XPages中的当前网址

context.getUrl().toString() 

XSPContext xspContext = new ServletXSPContextFactory().getXSPContext(FacesContext.getCurrentInstance()); 
    XSPUrl xspUrl = xspContext.getUrl(); 
    return xspUrl.toString(); 

没有工作正确。

例如:

网址到浏览器中https://myip/db.nsf

但SSJS功能以及Java函数返回只是http://myip/db.nsf

当我尝试这个没有一个反向代理,一切工作正常。 有没有办法在服务器端获取location.href?

回答

0

除非你想发送链接到其他地方,否则你不需要协议部分。如果您使用的是同一浏览器// someserver/somepage将使用当前使用的协议链接到另一台服务器。除此之外,代理可能会设置一个标题。

+0

的原因。对不起。我是盲人。是的,我只需要使用相对路径,一切都很好。 – Pudelduscher 2014-10-28 14:32:36

0

您可以使用下面的代码来手动创建的网址:

var path = facesContext.getExternalContext().getRequest().getContextPath() 
var url = "https://" + path 

这将路径返回到您的NSF文件与HTTPS前缀

+0

问题是,并不总是网址与https。所以手动设置对我来说不是一个解决方案。 – Pudelduscher 2014-10-28 12:28:09

+0

facesContext.getExternalContext()。getRequest()。getRequestURL()将返回xsp部分中的完整url。如果你切断了最后一个斜杠的正确部分(包括斜线),你会得到url – poisonedYouth 2014-10-28 12:34:21

+0

这是真的,但我必须手动添加https和域,这对我来说不起作用,因为protocoll和域是不固定。我需要动态地从bowser中获取它,比如location.href – Pudelduscher 2014-10-28 12:40:23

0

嗯...这可能是一个行政设置:通过互联网站点文档,您还可以创建网站规则(类型=替代),以自动计算传入模式的整个URL。查看关于如何设置站点文档以及网站规则的IBM Domino管理帮助。 目标是让两个URL具有相同的方案,以便XSP计算能够动态生成正确的值。

+0

是的,我认为这也是一个管理问题。但是,这是一个非常庞大而复杂的环境,我很想得到一个解决方案,我可以使用而无需进行任何管理更改。 我不能beleve有一种方法来从浏览器中获取价值,我的意思是不解析它从客户端js onload sessionScope变量 – Pudelduscher 2014-10-28 12:46:16

0

我相信你想要的是将$WSIS标题从反向代理到Domino设置为True。很像其他WebSphere connector headers,这应该会导致Domino在所有情况下都认为传入协议是HTTPS。请注意,这也造成了令Domino不幸的副作用,即导致Domino恢复其每个IP仅使用一个Site文档的行为;如果您利用反向代理来避免此错误,则必须找到其他路由,例如从代理中寻找X-SSL标头。