2014-10-28 85 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標頭。