java - 在 JSP 中处理页面导航的最佳策略

标签 java jsp navigation

我正在探索JSP来实现动态网页。要解决的一个问题是页面之间的导航。用户可以在浏览器中后退和前进。

这件事必须处理。例如,如果有人注销,我们不希望其他人通过单击“返回”来检索 session 或数据。另一个例子是我们不想重新提交表单两次。

我正在寻找解决页面导航问题的提示和建议。我想创建一个必须解决的问题列表+可能的解决方案:

问题:

  • 确保 session 不会被后退/前进点击检索/劫持
  • 确保表单不提交两次
  • 确保用户无法篡改 Cookie 或 URL 数据或隐藏字段来破坏控制流和安全性

解决方案:

  • 实现已访问页面的堆栈
  • 调用页面时,在其显示时刻进行注册,以区分新请求和“返回”
  • 控制当前 session

PS:我见过这个question ,但没有真正的答案。

最佳答案

Making sure sessions cannot be retrieved/hijacked with go back/forward clicks

disable browser cache这些页面。另请参阅Prevent user from seeing previously visited secured page after logout .


Making sure forms and not submitted twice

生成一个长的、唯一的且无法猜测的字符串,将其存储在 session 中..

String token = UUID.randomUUID().toString();
((Set<String>) session.getAttribute("tokens")).add(token);
request.setAttribute("token", token);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

..并作为表单的隐藏输入字段。

<input type="hidden" name="token" value="${token}" />

提交后,比较并删除 session 中的 key 。如果它在 session 中,则继续提交。

if (((Set<String>) session.getAttribute("tokens")).remove(request.getParameter("token")) {
    // Valid token. Proceed with submit.
} else {
    // Invalid token. Possible double submit.
}

Making sure users cannot fiddle cookies or URL data or hidden fields to break control flow and security

只需自己编写健壮的代码或使用现有且健壮的 MVC 框架,如 JSF2、Spring-MVC、Struts2 等。


Solutions:

  • Implement a stack of visited pages
  • When a page is invoked, register the moment it is displayed to differentiate new requests from 'go back'
  • Control current session

麻烦。

关于java - 在 JSP 中处理页面导航的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6353245/

相关文章:

java - 在 MVC 请求完成之前,Hibernate 事务不会启动

java - 防止 JSP 缓存值

java - 检测 JSP 中的下拉列表变化?

html - 导航显示顺序错误

html - 如何使用CSS修复响应式下拉菜单?

java - 我无法在 Java 中正确地乘以数组

java - 遍历树找到节点

java - 如何从多行字符串中获取二维数组?

ajax - 将 Spring 应用程序从 Glassfish 迁移到 Tomcat

css - 自定义 CSS 以创建 WordPress 下拉菜单