与许多网站一样,我的网站每个网页都有一个登录弹出窗口。大多数这些页面都是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