1.问题引入
环境:使用Struts2框架开发应用程序
做用户的登录功能,login页面有一个form表单接收用户输入的用户名和密码,提交表单,发送http请求,服务端程序正常接收请求数据,跳转页面。如果用户不小心刷新浏览器地址重新发送请求,就会再执行一遍这样的操作。显然,这是用户不小心的操作,但是事情却又做了一遍。如何解决呢?
2.Token机制原理
当请求login.jsp时,服务器查看表单中的token标签是否有值,如果没有就给token标签设置值,同时session会话中也会存入一个token值,与表单中的值是相同的。当提交表单到服务器时,表单中隐藏的token值也会一起携带过去,服务器会得到带过来的token值,同时会在session中把里面的token值也取出来,两者进行比较,如果相同,则表单提交成功,服务器会把session中的token值删除掉。如果用户在地址栏再刷新提交表单,则表单中的token值还是原来的,再提交到服务器,服务器会再进行比较,此时session中的值已经没有,不能再进行比较,则代表之前已经提交过,所以不能再重复提交。
3.使用步骤
1.在表单中添加一个标签
2.在Struts.xml在配置token拦截器
3.添加一个跳转页面的结果值invalid.token
了解千锋动态
关注千锋教育服务号
扫码匿名提建议
直达CEO信箱