Java 为什么是PRG模式而不是其他模式?
我需要防止重复的形式提交我的客户的网站Java 为什么是PRG模式而不是其他模式?,java,security,spring-mvc,web,post-redirect-get,Java,Security,Spring Mvc,Web,Post Redirect Get,我需要防止重复的形式提交我的客户的网站 我们需要一些表单数据从用户的订单确认页面 我们对web服务器使用负载平衡 方法1:发布/重定向/获取 (PRG模式:) 起初我尝试使用PRG模式。 在这种情况下,我认为我需要跨多个web服务器处理会话(或SpringFlashMap) 方法2:在客户端上禁用刷新。 我的一位同事提出了这种方法 方法3:员额/员额 另一位同事提出了这种方法 我认为方法2、3不是一个好的选择。 但是我不知道这些方法的具体缺点或安全风险。 我试着用谷歌搜索,但没能找到答
- 我们需要一些表单数据从用户的订单确认页面
- 我们对web服务器使用负载平衡
在这种情况下,我认为我需要跨多个web服务器处理会话(或SpringFlashMap) 方法2:在客户端上禁用刷新。 我的一位同事提出了这种方法 方法3:员额/员额 另一位同事提出了这种方法 我认为方法2、3不是一个好的选择。
但是我不知道这些方法的具体缺点或安全风险。
我试着用谷歌搜索,但没能找到答案 先谢谢你 [编辑] 我想更新利弊 方法1:发布/重定向/获取 赞成的意见
- 安全李>
- 如果您需要用户提供的一些表单数据在确认页面上显示,则需要使用
、会话
或其他方法数据库
- 如果您使用
,并且有多个服务器,则必须采取措施使会话在多个服务器之间可用李>会话
- 如果您限制浏览器的标准功能(如刷新),用户会感到不安李>
需要考虑F5、CTRL+F5,⌘ + F5等,各种刷新图标 - 在移动设备中,许多web浏览器在用户重新加载浏览器时自动刷新页面
- 您不必担心跨多个服务器的会话共享问题
- 第二个表单提交可能失败李>
您可能会发现这一点。方法3的目的是,正如我所说的,我们需要用户提供一些表单数据(例如,用户选择的颜色),并需要在确认页面上显示这些数据。在PRG模式中,我们可以使用会话。但是,由于我们使用多个web服务器,会话共享或其他事情是一项额外的工作。我们可以在重定向时使用参数,但我认为在url中显示用户的订单数据不是一个好主意。因此,为了方便地将“用户表单数据”从提交页面发送到确认页面,我的同事建议使用方法3。好的,nonce方法不依赖于共享会话——它依赖于一个共享数据库,我想您已经拥有了这个数据库。