2012-06-20 65 views
0

我需要爲我的表單操作創建URL,但是表單應該在https下提交,當前是在HTTPS的9002端口上運行的底層系統。我不能使用以下在我的JSP頁面獲取HTTPS的JSP頁面的服務器名稱和端口號

<form:form action="${request.contextPath}/springSecurity/login" 
method="post" commandName="loginForm" target="guestFrame"> 

的選擇,因爲當HTTP上下文路徑來了HTTP和系統會拋出異常如表格必須由HTTPS提交。 由於主機名稱爲localhost,因此我無法對動作URL進行硬編碼,因爲即使HTTPS端口是可配置的,因此它甚至不能被硬編碼。

有什麼辦法,我可以使用JSTL或任何其他方式創建在我的JSP中的網址,以便我可以在HTTPS

回答

1

HttpServletRequest.getServerName()提交表單會給服務器名稱。但是,沒有辦法獲得https端口。如果你想在你的方法中修復它,你應該使用默認的443

但是,最好的解決方案是使用Security Transport Guarantee作爲登錄網址,這樣服務器會自動將springSecurity/login頁面重定向到https

將此條目添加到web.xml將自動將springSecurity/login重定向到https

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>secure</web-resource-name> 
     <url-pattern>/springSecurity/login</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
相關問題