【发布时间】:2011-04-12 03:21:17
【问题描述】:
像许多网站一样,我在我网站的每个网页上都有一个登录弹出窗口。这些页面中的大多数都是 http(非安全)。但是登录机制必须发布到一个安全的 url。这一切都很好。问题在于各种开发环境、暂存环境和不同生产环境中的安全 url 变化。
所以没什么大不了的,我只是为每个环境都有一个带有安全主机和端口的属性文件。现在有没有办法用正确的上下文和 jsession id(如果需要)和 c:url 通常做的其他事情来编码 url?
例如:
<form method="post" action="${rootHttpsUrl}/login">
我可能认为这可以修改 url 以添加正确的上下文、会话信息(如果需要)等:
<form method="post" action="<c:url value='${rootHttpsUrl}/login'/>">
但这不起作用,因为 c:url 看到 https://some-url.com 并认为这是一个外部链接。所以我可以自己修改网址:
<form method="post"
action="<%=response.encodeURL(${rootHttpsUrl}${pageContext.request.contextPath}/login)%>">
但是像这样转义到 java 代码不会让 java 看到 rootHttpsUrl jsp 变量(我如何将它暴露给 java?)。有没有办法从 JSP 中调用 encodeURL?
那么这里最好的解决方案是什么?我正在使用 Spring、Spring webmvc 和 Spring Security v3.0。理想情况下有类似的东西
<c:url value='/login' secure='true'/>
更新:我想出的最好办法是为每个环境都有一个属性文件,其中包含 https 主机和端口的属性。然后我将它添加到模型中并引用任何像这样的安全 URL:
https://${httpsHostAndPort}<c:url value='/login'/>
【问题讨论】:
标签: spring jsp spring-mvc spring-security jstl