posts - 29, comments - 0, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Structs 令牌解決二次提交問題

          Posted on 2007-05-28 15:38 change 閱讀(201) 評論(0)  編輯  收藏

          //解決二次提交問題(提交前)

                    preSubmitValid(servletRequest,servletResponse);
                    
          //解決二次提交問題(提交)
              if(!submitValid(servletRequest,servletResponse))
               try
                        {
                         servletResponse.sendRedirect("public/repeatdeal.jsp");
                         return null;
                        }
                        catch (Exception error)
                        {
                         servletRequest.setAttribute("errorMSG", "重復提交造成頁面跳轉出錯:" + error.getMessage());
                        }   
                       
          /**
                   * 解決二次提交問題(提交前)

                   * @param request
                   * @param response
                   */
                  public void preSubmitValid(HttpServletRequest servletRequest,HttpServletResponse response)
                  {
                   counter = -1;
                      servletRequest.getSession().setAttribute("submissioncount",
                              new Integer(counter));
                      /**
                       * 重要:

                       * 通過調用 saveToken(request)方法,動態生成一個token,并且存放到session中,
                       * 以便在以后可以在動態生成的頁面中加入隱藏字段 <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="動態值">
                       * 只要調用了該方法,此后包含<html:form...>標簽的頁面中都會動態生成上面所說的隱藏字段。

                       */
                      this.saveToken(servletRequest);         
                  }
                  /**
                   * 提交驗證,檢驗是否是重復提交,如果重復提交跳轉到統一處理頁面
                   * @param servletRequest
                   * @param servletResponse
                   * @return
                   */
                  public boolean submitValid(HttpServletRequest servletRequest,HttpServletResponse servletResponse)
                  {
                   counter += 1;
                   servletRequest.getSession().setAttribute("submissioncount",new Integer(counter));
                      if (!this.isTokenValid(servletRequest))
                       return false;

                      /**
                       * 在認可了用戶的合法提交后,一定要調用resetToken(request)重置token,這樣session中就沒有相應的token啦

                       * 這樣才能夠保證用戶再次提交相應數據時,能夠檢測出來。

                       */
                      this.resetToken(servletRequest);
                      return true;         
                  }                      

          主站蜘蛛池模板: 五河县| 遂川县| 二连浩特市| 神池县| 广元市| 集贤县| 梁河县| 西青区| 广州市| 云浮市| 定襄县| 扬中市| 永州市| 洛南县| 师宗县| 金秀| 沙田区| 游戏| 库车县| 丹棱县| 怀化市| 鸡西市| 卓尼县| 资兴市| 孝感市| 长治县| 新源县| 高唐县| 治多县| 桃源县| 四平市| 红原县| 抚宁县| 吉首市| 泾阳县| 定襄县| 扬中市| 金寨县| 徐闻县| 平塘县| 图木舒克市|