2012-10-20 69 views
3

我只想獲取當前URL是在HTTP還是HTTPS下。問題是我們在我們的測試環境中有許多自簽名證書,因此驗證證書可能性不是一種選擇。我已經嘗試了以下方法,但是在所有情況下都沒有效果。從當前URL獲取HTTP或HTTPS

String protocol = request.getProtocol(); 
out.println(protocol); // prints out HTTP/1.1 on self signed servers 

Boolean secure = ((HttpServletRequest)pageContext.getRequest()).isSecure(); 
if (secure) { 
    out.println("secure") 
} else { 
    out.println("not secure") // always fails 
} 

我想我可以使用調用getRequest和搜索的字符串爲「https」 - 但我假設有這樣做的真正支持的方式。

+0

[java ee doc](http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#isSecure%28%29)說'isSecure()'返回一個布爾值,指示是否此請求是使用安全通道(例如HTTPS)完成的。它似乎並不關心自簽名證書。 – Haozhun

+0

只是猜測,但你有沒有嘗試過這與真正的簽名證書?也許它返回false,因爲自簽名證書不安全。 –

+0

'isSecure'應該可以工作,但它也取決於您的環境,例如您的HTTP反向代理配置。任何守護你的應用服務器的HTTP服務器? – home

回答

2

使用自簽名或正式證書無關緊要。如果SSL/TLS未在部署容器處終止,則'isSecure()'將默認返回'false'。但是,即使未在部署容器中終止SSL/TLS,也可以將某些部署容器(如Tomcat)配置爲爲'isSecure()'調用返回'true'。例如。如果SSL在(硬件)負載均衡器中終止,並且'sendRedirect()'與相對URL一起使用,這會很有幫助。