动态ActionForm,token怎么用啊
发布网友
发布时间:2022-04-22 06:42
我来回答
共1个回答
热心网友
时间:2022-06-16 17:28
Struts使用Token机制,来防止恶意的破坏和重复提交问题,也就是点击后退后在再提交,这是Struts无法发现的,在form中生成一个token码,
在session中也保存有一个同样的token码,当表单提交后,判断两个token码向等后,就会改变session中的这个token码,当然在用回退后,
form的token码是不会变的,在提交,还会判断两个token码是否相等,如果不等就会抛出异常,证明这是过时的垃圾数据。
但是必须要使用struts标签,struts会自动生成一个隐藏域,来保存token码
而且必须要定义一个ActionForm的子类
void saveToken(HttpServletRequest request)方法用于将在客户端生成的token码,保存在session中。
void resetToken(HttpServletRequest request)方法用于重置token码,生成新的token码。
boolean isTokenValid(HttpServletRequest request,boolean reset)判断token码是否相等,并且是否重置token码。reset是设定是否重置token码,一般设为true。
设置token码
public ActionForward toadd(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception
{
saveToken(request);
return mapping.findForward("next");
}
验证token码
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception
{
if(isTokenValid(request, true)){
request.setAttribute("message", "contratulation!");
} else {
request.setAttribute("message", "sorry");
}
return mapping.findForward("next");
}
Struts动态Form
DynaActionForm,动态的ActionForm,动态的form不需要去写特定的ActionForm类,只需要在配置文件中配置好form中的属性名和属性类型。Struts会自动的封装成动态的Form。
<form-bean name="xxx" type="org.apache.struts.action.DynaActionForm">
<from-property name="xxx" type="xxx.xxx.xxx">
<from-property name="xxx" type="xxx.xxx.xxx">
...
...
</form-bean>
用法和普通的ActionForm 一样