关于struts-token拦截器的官方解释,确保每个请求只有一个token被处理,可以确保后退按钮和双击操作不会引起不必要的负面影响。
按我的理解,token的作用就是防止重复提交,(重复提交本身就是一个误操作,重复提交会导致程序中的逻辑出错),
原理:服务端处理客户端请求之前,会生成一个token保存在session中,并发送到客户端。客户端提交请求时,将token发送到服务端,在struts中通过拦截器对token与session中的token进行验证,如果相等则说明没有重复提交,拦截器放行继续执行后面的操作;如果不相等则说明重复提交,显示错误信息。请求处理完成后,在返回客户端之前,会生成一个新的token替换原来的token,用于下一次token验证。
如图为一次请求的token验证流程:
重复提交:
第一次请求时的token:
处理请求完成后:(session中原来的token被清除了,但在渲染客户端之前还会生成一个token)
渲染完成后,打开页面源代码查看
当重复提交(返回/刷新/双击等)时,由于token不一致阻止请求处理。
更多相关知识比如并发token验证请看:
Blog:http://www.cnblogs.com/withyou/p/3169728.html