1、Struts 使用Token 机制,来防止恶意的破坏和重复提交问题,也就是点击后退后在再提交,这是Struts 无法发现的,在 form 中生成一个token 码,在session 中也保存有一个同样的token 码,当表单提交后,判断两个 token码相等后,就会改变session中的这个token 码,当然在用回退后,form 的token 码是不会变的,在提交,还会判断两个token 码是否相等,如果不等就会抛出异常,证明这是过时的垃圾数据。
2、方法:
(1)voidsaveToken(HttpServletRequest request)方法用于将在客户端生成的token 码,保存在session 中。
(2)voidresetToken(HttpServletRequest request)方法用于重置token 码,生成新的token 码。
(3)booleanisTokenValid(HttpServletRequest request,boolean reset)判断token 码是否相等,并且是否重置token 码。reset 是设定是否重置token 码,一般设为true。
3、设置token 码
public ActionForwardtoadd(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throwsException{
saveToken(request);
return mapping.findForward("next");
}
4、验证token 码
publicActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throwsException{
if(isTokenValid(request, true)){
request.setAttribute("message","contratulation!");
} else {
request.setAttribute("message", "sorry");
}
return mapping.findForward("next");
}