我正在使用Struts和Java。问题是我有一个包含一些结果的页面。用户可以单击某个项目并进行编辑。我想在编辑用户后能够返回结果。返回没有被打破,但如果他提交表格进行更新,他将不得不单击2次,我认为可能有问题。
我尝试过header("Referer")
,但这在Internet Explorer中无效。
我正在尝试实施解决方案。有任何想法吗?我的想法是保存网址并移动该网址的ID。当我想返回时,从ID获取URL。将其存储在会话中不是解决方案,因为用户可能已经打开了多个窗口。
答案 0 :(得分:7)
将URL作为请求参数传递可能会产生安全问题。 Powerlord是正确的,USER可以改变引用者标题。这将允许用户访问页面,无论如何他们都可以做。更严重的是,遵循请求参数中的URL允许攻击者将用户发送到攻击者选择的页面,其外观是应用程序推荐此页面。因此,BalusC的答案可以启用跨站点请求伪造。
答案 1 :(得分:2)
最好的方法是将其作为请求参数传递。在编辑链接或按钮上,只需将当前URL作为请求参数传递。这是一个带链接的例子:
<a href="/login?from=${pageContext.request.requestURI}">edit</a>
或如果是提交表单的按钮,则将其作为隐藏的输入值以相同的形式传递:
<input type="hidden" name="from" value="${pageContext.request.requestURI}">
在包含编辑表单的页面中,将其作为表单的隐藏输入值传递给后续请求:
<input type="hidden" name="from" value="${param.from}">
在操作方法中,只需在完成操作后重定向到该URL。由于我不做Struts,我不能给出一个详细的Struts示例,但是这里是你如何使用“普通vanilla”Servlet,你必须能够将它移植到Struts方法:
response.sendRedirect(request.getParameter("from"));