1

处理发布到 Java Servlet 的表单验证的一种策略是在验证失败时转发回原始 JSP 视图。这允许用户看到他们刚刚提交的表单的上下文中存在验证失败(可能他们没有为必填字段提供值),然后他们可以重试。但是,由于此策略不遵循众所周知的 Post-Redirect-Get 模式 ( http://en.wikipedia.org/wiki/Post/Redirect/Get ),因此浏览器历史记录现在包含一个非书签页。如果用户稍后尝试通过历史记录/返回按钮访问此页面,他们将收到文档过期异常(至少在 Firefox 19 中)。这应该如何处理?有没有更好的办法?

注意:我所描述的策略实际上是在 Servlet 信息页面中推荐的:(https://stackoverflow.com/tags/servlets/info)。但是没有提及浏览器历史记录问题。

注意:这个问题类似:(JSF PRG with validation error)。它建议对帖子使用 AJAX。如果这是推荐的策略,也许我们需要更新 Servlet wiki?不完全确定这将如何从 JSF 转换为 servlet。

4

1 回答 1

1

据我所知,验证失败方法的转发是有缺陷的,不应该使用。而是使用其中之一:

  1. 在会话中存储验证错误消息并进行重定向。

  2. 使用 AJAX 提交表单

  3. 使用 JavaScript 捕获客户端上的所有验证错误,并将到达服务器的验证失败视为应用程序错误,并假设有人在不使用申请表的情况下直接发布到服务器,或者申请表有错误。如果你转发到一个错误页面,你也会遇到同样的问题,但攻击者应该得到一个浏览器历史记录。如果会话可用,您可以在会话中填充错误消息并进行重定向。无论哪种方式,它都会在“正常”操作中从服务器中删除验证,并在一定程度上回避这个问题。

于 2013-03-27T17:13:54.273 回答