積累,創造,分享!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            25 Posts :: 13 Stories :: 26 Comments :: 0 Trackbacks
          用同步器令牌來防止客戶端的重復提交,這的確是個好注意!
          特別是防止用戶在瀏覽器當中點擊后退或者刷新按鈕所產生的不良影響。
          道理其實很簡單,大概流程為:輸入請求-->比較值-->處理請求-->生成令牌-->保存令牌-->
          準備響應-->外發響應。
          在客戶請求當中攜帶服務器前一次響應時發給客戶端的令牌,去與服務器端保存的令牌相比較,如果相等,則說明當前是合法提交。而不過不匹配,則可能是重復提交了。
          在具體的實現當中以jsp為例,在控制器當中采用servlet來負責管理令牌,將服務器端的令牌保存在session當中,通過每次的請求來更新這個令牌。然后在將要處理的業務邏輯之前判斷提交上來的令牌是否合法。如果合法則繼續執行,如果不合法,則避免執行正常的操作。
          servlet當中生成token代碼可如下:
          public void saveToken(HttpServletRequest request){
                   HttpSession session
          =request.getSession();
                   String token
          =generateToken(request);
                   session.setAttribute(Constants.TOKEN,token);
          }
          檢查令牌合法性
          public boolean isTokenValid(HttpServletRequest request){
                  HttpSession session
          =request.getSession();
                  String saved
          =session.getAttribute(Constants.TOKEN);
                  String token
          =request.getParameter(Constants.TOKEN);
          if(saved.equals(token)){
                
          return true;
          }

               
          return false;
          }


          在JSP端,通過助手類將當前生成的令牌保存在HTML的表單的隱含域當中。
          比如
          <input type="hidden" name="TOKEN" value="as8d7j3sk">

          通過這種手段實現起來并不十分復雜。當然這只是防止用戶提交的手段之一。其他的方法有待大家不斷補充。
          來源參考:Core J2ee patterns 2 


          posted on 2005-11-15 11:14 nighthawk 閱讀(967) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 江山市| 连江县| 古浪县| 平阴县| 泉州市| 巴林左旗| 六枝特区| 靖西县| 朝阳市| 延津县| 理塘县| 景宁| 方山县| 呼玛县| 青阳县| 贵溪市| 松潘县| 公安县| 民权县| 洪湖市| 安图县| 长岭县| 定州市| 景宁| 武平县| 阿克| 鹤壁市| 吴忠市| 清丰县| 太保市| 夏邑县| 白沙| 郯城县| 临夏县| 富阳市| 长垣县| 老河口市| 元谋县| 延安市| 逊克县| 金华市|