Struts1.x 重复提交剖析
在某些情况下,如果用户对一个HTML表单重复提交,Web应用应该必须能够判断用户的重复提交行为,以做相应的处理。
Struts给出了一个参考实现。org.apache.struts.action.Action类中提供了一系列和Token有关的方法:
在这里会自动生成Token的隐藏域:
Action2: jsp页面提交给过来请求if(!isTokenValid(request)) { System.out.println("重复提交TokenAction"); saveToken(request); return (new ActionForward(mapping.getInput())); } else { resetToken(request); System.out.println("重新设置Token! TokenAction"); } if(!isTokenValid(request)){ System.out.println("重复提交TokenAction"); saveToken(request); return (new ActionForward(mapping.getInput()));}else{ resetToken(request); System.out.println("重新设置Token! TokenAction");}判断是否是重复提交,如果重复提交就转发到默认在struts-config.xml中为Action2配置的错误页面中,并重新建立一个Token。如果不是重复提交就就从当前session中删除Token.
OK,就是这些了,如果你的应用中可以返回一个错误页面,那么你也可以在filter中应用Token这些方法,只不过需要对struts的jar包进行反编译,拿到自己的类中来用。