rss· 投稿· 设为首页· 加入收藏· 繁體版

解决 servlet或jsp重复提交的问题

 参考struts的token(令牌)机制:

          在提交的时候在Servlet中根据用户的sessionid和当前时间的long值生成一个令牌(每次提交都会生成一个新令牌),将令牌保存在该用户的会话中,并将令牌的值以request属性形式传到前端页面,在前端页面的form中增加传递令牌的隐藏域<input type="hidden" name="clientToken" value="<%=clientToken%>" />,提交form的时候,也会将clientToken传入Servlet,如果session中保存的令牌值与传入的不同,则是重复提交,因为每次请求Servlet都会生成新的令牌,刷新时的令牌值是旧的令牌值,不是最新的令牌值。

           jsp代码:

           <%
    String clientToken = (String)request.getAttribute("clientToken");
    clientToken = clientToken==null?"":clientToken;
           %>

<form>中增加<input type="hidden" name="clientToken" value="<%=clientToken%>" />

          Servlet代码:

          String clientToken = request.getParameter("clientToken");
          String sessionToken = (String) session.getAttribute("token");

          if(sessionToken!=null&&!clientToken.equals(sessionToken)){
                 System.out.println("请不要重复提交!");
          }else{

                  //正常的操作

          }

           //生成新令牌
           String token = generateToken(request);
           request.setAttribute("clientToken", token);
           //替换旧令牌
           session.setAttribute("token", token);

顶一下
(0)
踩一下
(0)