與許多網站一樣,我的網站每個網頁都有一個登錄彈出窗口。大多數這些頁面都是http(不安全)。但登錄機制必須發佈到一個安全的網址。所有這些都很好。問題在於各種開發環境,分期和不同生產環境中的安全url更改。使用spring安全確定JSP中的安全url
因此,沒有太大的協議,我只需要爲安全主機和端口的每個環境提供一個屬性文件。現在有沒有一種方法來編碼URL的正確的上下文和jsession id(如果需要)和其他事情c:url通常會做?
例如:
<form method="post" action="${rootHttpsUrl}/login">
我可能會想如果需要的話,等這將致力於修改URL添加正確的背景下,會議信息:
<form method="post" action="<c:url value='${rootHttpsUrl}/login'/>">
但不工作因爲c:url看到https://some-url.com並認爲它是外部鏈接。所以,我可以只修改URL自己:(?我怎麼揭露這JAVA)
<form method="post"
action="<%=response.encodeURL(${rootHttpsUrl}${pageContext.request.contextPath}/login)%>">
但逃到Java代碼一樣,不會讓Java的看到rootHttpsUrl JSP變量。有沒有辦法從JSP內調用encodeURL?
那麼這裏最好的解決方案是什麼?我使用Spring,Spring webmvc和Spring Security v3.0。理想的情況是有一些像
<c:url value='/login' secure='true'/>
更新:我想出的最好是有一個屬性文件與https的主機和端口屬性每個環境。然後,我添加到模型中,並引用任何安全網址是這樣的:
https://${httpsHostAndPort}<c:url value='/login'/>
是的,我們也需要上下文,但很容易添加。但是,除非必要,我不希望會話ID暴露(cookie未啓用)。我想我至少在尋找一種標準的方式來添加會話ID只在必要時... – 2010-09-14 17:51:11
你可以在每個['HttpServletRequest#isRequestedSessionIdFromURL()'](http://download.oracle.com/javaee/5/API /的javax/servlet的/ HTTP/HttpServletRequest的。html#isRequestedSessionIdFromURL%28%29)來確定客戶端是否通過URL傳遞會話ID(因此可能不支持cookie)。 – BalusC 2010-09-14 17:57:52
這就是HttpServletRequest#encodeURL的問題,它爲我們完成所有工作。我如何在JSP頁面中使用它?我可以做一個<%= %>,但是我不能訪問JSP變量......或者我可以嗎? – 2010-09-14 18:01:39