使用spring security确定JSP中的安全URL

时间:2010-09-14 12:00:38

标签: spring jsp spring-mvc spring-security jstl

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

2 个答案:

答案 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>

欢迎使用上述方法的任何缺点。 安全问题?