struts token
1 客户端重复刷新页面,可能导致数据的重复提交
原因:
跳转使用forward方式跳转,只显示第一期请求的路径信息
/add--->result.jsp
解决:
servlet :使用redirect方式跳转
struts :<forward redirect="true" ...>
2 客户端不登陆,可以随意其他资源
解决:
filter过滤除了登录和注册以外的所有资源
filter从session中获取用户名,如果找到,则继续后续操作。找不到则跳转到登录页面
登录流程中,必须在登录成功之后,在session中存储登录成功的用户名
3 同一个用户在系统中同时间内,只能登录一次
解决:
用户登录时,要在ServletContext中查找该用户名是否存在
如果存在,提示用户已登录
如果不存在,则让其正常登录
在用户登录成功之后,将其用户名存储在ServletContext中
4 客户端点击回退按钮,再次提交重复数据
解决:
1) 在业务层针对重复提交的数据进行业务判断,
问题:在业务层,通过访问数据库进行的判断,效率较低
2) 使用js将页面中的后退按钮置为无效,或者去掉工具栏
问题:客户端的界面不友好
3) token
优点:
界面比较友好
拦截判断工作,在web层进行处理
过程:
a.客户端首次访问系统时,系统必须分配给用户一个token
b.客户端携带token,以及自己的数据访问系统
c.系统先判断token是否有效,有效则正常访问<---|
如果无效,则跳转到错误页面 |
d.token有效地情况下,客户端正常处理完毕之前,|系统将该token置为无效
e.用户点击回退按钮,提交信息以及现有的token--|
addPage.do--->add.jsp---->add.do--->StuMgmtMappingDispatchAction--addStu()--->biz-->dao
==>
SaveTokenAction(产生新token给用户)--->addPage.do--->add.jsp---->add.do
StuMgmtMappingDispatchAction(先判断token)--addStu()--->biz-->dao