使用 spring security 确定 JSP 中的安全 url
Posted
技术标签:
【中文标题】使用 spring security 确定 JSP 中的安全 url【英文标题】:Determine secure url in JSP with spring security 【发布时间】: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'/>
【问题讨论】:
【参考方案1】:在浏览了 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>
欢迎对上述方法提出任何缺点。 安全问题?
【讨论】:
【参考方案2】:自己硬编码。
action="$rootHttpsUrl/login;jsessionid=$pageContext.session.id"
【讨论】:
是的,我们还需要上下文,但很容易添加。但是,除非必要(未启用 cookie),否则我不希望公开会话 ID。我想我至少在寻找一种仅在必要时添加会话 ID 的标准方法...... 您可以在每个HttpServletRequest#isRequestedSessionIdFromURL()
下使用来确定客户端是否通过 URL 传递会话 ID(因此可能不支持 cookie)。
这与 HttpServletRequest#encodeURL 的问题相同,它为我们完成了所有工作。如何在 JSP 页面中使用它?我可以做一个 ,但是我不能访问 JSP 变量......或者我可以吗?
您可以使用pageContext.findAttribute("rootHttpsUrl")
在scriptlet中获取$rootHttpsUrl
。我虽然不是scriptlet的粉丝,但我看不到其他方式。 Spring 家伙可能会借助 servlet 或过滤器(如预处理功能)了解更简洁的方法。
我用我认为最好的方法更新了这个问题以上是关于使用 spring security 确定 JSP 中的安全 url的主要内容,如果未能解决你的问题,请参考以下文章
使用spring 3 security在jsp页面中访问我的自定义用户对象
如何配置 Spring Security 以允许在 JSP 页面中使用 hasPermission?
如何使用 Spring MVC & Security、Jasig CAS 和 JSP 视图在 Spring Boot 2 中配置 UTF-8?