如果表单被重复的提交,第二次提交可能产生错误,用户不断的刷新页面,调用对应的Action,不进行控制,如注册页面不断的和数据库交互,对于服务器端负载太大。
在此利用Struts的同步令牌机制来解决问题
主要是利用了Action类中的一些方法
(1)saveToken(HttpServletRequest request)
生成一个新的令牌值并保存在session中(每次生成的都不一样)
(2)isTokenValid(HttpServletRequest request)
判断当前session和请求参数中的令牌值是否匹配,若匹配返回true,若不匹配返回false
(3)resetToken(HttpServletRequest request)
将session中的令牌值删除
下面以一个简单的注册的例子来介绍
现在有一个写好的register.jsp的登录页面,现在我们对它来做一下修改,使它能够防止被重复的提交。
1.添加一个过滤器,使得在执行register.jsp之前先执行过滤器
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request =
(HttpServletRequest)arg0;
//跳转到PreRegisterAction
request.getRequestDispatcher
("/token/preRegister.do")
.forward(arg0, arg1);
}
过滤器执行preRegister
2.添加Action,PreRegisterAction.java,这个action很简单,就是生成一个新的令牌放在session中
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//生成一个新的令牌值放置在session中
super.saveToken(request);
return new ActionForward
("/token/register.jsp");
}
3.在register.jsp页面上的form改为<html:form action="/token/sufRegister">
4.添加Action,SufRegisterAction.java
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RegisterForm registerForm = (RegisterForm) form;
//判断session和请求参数中的令牌值是否匹配
if(!super.isTokenValid(request)){//不匹配
//若不匹配说明重复提交表单了,那么在
//页面上要提示一下用户
ActionMessages errors =
new ActionMessages();
ActionMessage message =
new ActionMessage("error.token");
errors.add("token", message);
super.saveErrors(request, errors);
return new ActionForward
(mapping.getInput());
}else{//匹配
//若匹配说明用户是第一次提交表单
//构造一个Customer对象,并调用模型层中
//的业务接口方法register()进行用户注册
System.out.println("注册成功...");
//若注册成功要从session中删除令牌值
super.resetToken(request);
return new ActionForward
("/token/login.jsp");
}
}
这样就完成了利用同步令牌来防止网页重复提交的问题。
分享到:
相关推荐
struts token机制解决表单重复提交
主要讲解了在structs怎样通过Token令牌解决表单重复提交的问题。附带了擦参考项目。
在struts 中可以通过token 来解决重复提交的问题。
详细介绍struts+token机制解决表单重复提交问题。附带相关代码
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
利用struts1的令牌来解决页面的重复提交问题
利用Token机制解决重复重复提交
简单的struts2令牌token实例 方便应用 不懂token也可以参考学习 主要用于解决重复提交的问题
JavaEE Struts2利用tokenSession防止重复提交
struts2中token限制表单多次提交
用struts的token解决重复提交问题
用struts使用Token机制来实现防重复提交
struts2_token控制刷新重复提交
很好的大家试试吧 看看怎么样
详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要...
NULL 博文链接:https://eleopard.iteye.com/blog/1766851
C#WEB用户令牌TOKEN验证,防止HTTP、GET、POST等提交包含服务端和客户端源码。Nginx集群,SSL证书的WebApi令牌验证
Struts1.x令牌(Token)的使用.rar
防止表单重复提交的方法(简单的token方式),内附实现代码及实现思路。
基于SSM开发框架,使用Token并通过注解和拦截器方式实现表单重复提交验证