2015-04-06 90 views
3

在我們的項目之一,我們仍然要使用JSF 1.2 + Tomcat的6和問題是,當我送https - 請求到服務器,並試圖獲得請求的URL託管bean如下:爲什麼request.getRequestURL()返回非https網址?

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext(); 
HttpServletRequest request = (HttpServletRequest)context.getRequest(); 
String url = request.getRequestURL().toString() 

發送請求按鈕只是一個提交按鈕看上去如下:

<h:form id="contactform"> 
    <h:commandButton id="submit" action="#{forgotPasswordBean.doSend}" 
</h:form> 

我得到httpshttp基於URL這一翻譯。 在Web瀏覽器的調試面板我確信,一個https -request實際發送,但URL中包含的鏈接,只是http請求。什麼是問題或者它只是一個錯誤?

回答

2

HttpServletRequest#getRequestUrl()包含協議,服務器名稱,端口號和服務器路徑,即它應該包含https如果連接實際上是安全的並且處於HTTP狀態。

然而,這並不確定是否連接可靠的唯一途徑。該ServelRequest接口定義了兩個更多的選擇(ServletRequest#getScheme()ServletRequest#isSecure())如果請求被固定或不檢測:

String scheme = request.getScheme(); //will return "https" when connection is secured 
//or 
boolean isSecured = request.isSecure(); //will return true when connection is secured 

更多信息:

+0

那麼,request.isSecure();爲我返回false ... – user3663882 2015-04-06 11:06:40

+0

request.getScheme();返回http ...我真的不知道這件事...... – user3663882 2015-04-06 11:07:29

+2

其實,問題是我們有一個負載blancer發送純http請求。 – user3663882 2015-04-06 11:13:17

5

這種行爲可以發生,如果您在應用程序前有一個負載均衡器。即使請求是在HTTPS中完成的,負載均衡器會將它們重新發布爲導致此行爲的普通http請求。

一個例子使用GAE(谷歌應用程序引擎)時。您可以使用HTTPS端點(https://my-app.appspot.com),但您的應用將繼續接收HTTP中的所有請求。

這是由@ user3663882在批准的答案的評論下指出的。

+0

一個好的負載均衡器至少傳遞了一些額外的http頭部,表明這是一個安全的連接 – Kukeltje 2017-10-03 19:31:54

相關問題