java mvc中重复提交表单,SpringMVC JSP解决表单重复提交问题

web应用在用户表单操作的时候由于连续点击或者界面提交完刷新等情况,会出现重复提交的问题。下面给出其中一种解决方案:利用session和表单的token值做对比,如果不相等则表示重复提交。

1.自定义标签

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

viway view tag lib

3.0

viway

http://www.viway.com/tag/view

token

com.viway.project.jsp.tag.TokenTag

empty

token

false

2.token class

public class TokenTag extends RequestContextAwareTag {

private static final long serialVersionUID = 4140002821890713194L;

private String token = null;

public String getToken() {

return token;

}

public void setToken(String token) {

this.token = token;

}

@Override

protected int doStartTagInternal() throws Exception {

String token = UUIDGenerator.getUUID();

pageContext.getSession().setAttribute("token",

token);

setToken(token);

StringBuffer sb = new StringBuffer();

sb.append("

sb.append(" type=\"" + "hidden" + "\"");

sb.append(" name=\"" + "token" + "\"");

sb.append(" value=\"" + token + "\"");

sb.append(" />");

pageContext.getOut().println(sb.toString());

return SKIP_BODY;

}

@Override

public int doEndTag() throws JspException {

return EVAL_PAGE;

}

}

3.在form表单里增加tag

username:

password:

4.在controller层的post方法里增加校验

@RequestMapping(value = "/doregister", method = RequestMethod.POST)

public ModelAndView doRegister(

@ModelAttribute("registerBean") @Valid RegisterBean registerBean,

BindingResult result, HttpServletRequest request) {

ModelAndView mav = new ModelAndView();

if (isDupSubmit(request)) {

logger.warn("重复提交表单");

mav.setViewName("cust/register");

return mav;

}else{

//todo

}

]

//比较token是否一致的方法

public boolean isDupSubmit(HttpServletRequest request) {

String serverToken = (String) request.getSession(false).getAttribute(

"token");

if (serverToken == null) {

return true;

}

String clinetToken = request.getParameter("token");

System.out.println("serverToken:" + serverToken + " clinetToken:" + ""

+ clinetToken);

if (clinetToken == null) {

return true;

}

if (!serverToken.equals(clinetToken)) {

return true;

}

return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值