与许多网站一样,我的网站的每个网页都有一个登录弹出窗口。这些页面中的大多数是http(非安全)。但是登录机制必须发布到安全URL。这一切都很棒。问题是各种开发环境,登台和不同生产环境中的安全URL更改。
所以没有太大的交易,我只为每个具有安全主机和端口的环境都有一个属性文件。现在有没有办法用正确的上下文和jsession id(如果需要)和其他东西c:url编码url通常会做什么?
例如:
<form method="post" action="${rootHttpsUrl}/login">
我可能认为这可以修改网址以添加正确的上下文,会话信息(如果需要)等等:
<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'/>
答案 0 :(得分:0)
自己硬编码。
action="${rootHttpsUrl}/login;jsessionid=${pageContext.session.id}"
答案 1 :(得分:0)
在浏览了2个小时的各种替代方案之后,这个页面确实非常有用。
我的问题是在我的spring安全Web应用程序中禁用缓存js和css文件。 但同时在特定会话中“缓存”这些文件。
为每个请求传递唯一ID是建议的方法之一。
这就是我所做的: - 而不是
<script language="javascript" src="js/home.js"></script>
我用过
<script language="javascript" src="js/home.js?id=${pageContext.session.id}"></script>
欢迎使用上述方法的任何缺点。 安全问题?