積累,創(chuàng)造,分享!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            25 Posts :: 13 Stories :: 26 Comments :: 0 Trackbacks
          用同步器令牌來防止客戶端的重復(fù)提交,這的確是個(gè)好注意!
          特別是防止用戶在瀏覽器當(dāng)中點(diǎn)擊后退或者刷新按鈕所產(chǎn)生的不良影響。
          道理其實(shí)很簡單,大概流程為:輸入請求-->比較值-->處理請求-->生成令牌-->保存令牌-->
          準(zhǔn)備響應(yīng)-->外發(fā)響應(yīng)。
          在客戶請求當(dāng)中攜帶服務(wù)器前一次響應(yīng)時(shí)發(fā)給客戶端的令牌,去與服務(wù)器端保存的令牌相比較,如果相等,則說明當(dāng)前是合法提交。而不過不匹配,則可能是重復(fù)提交了。
          在具體的實(shí)現(xiàn)當(dāng)中以jsp為例,在控制器當(dāng)中采用servlet來負(fù)責(zé)管理令牌,將服務(wù)器端的令牌保存在session當(dāng)中,通過每次的請求來更新這個(gè)令牌。然后在將要處理的業(yè)務(wù)邏輯之前判斷提交上來的令牌是否合法。如果合法則繼續(xù)執(zhí)行,如果不合法,則避免執(zhí)行正常的操作。
          servlet當(dāng)中生成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端,通過助手類將當(dāng)前生成的令牌保存在HTML的表單的隱含域當(dāng)中。
          比如
          <input type="hidden" name="TOKEN" value="as8d7j3sk">

          通過這種手段實(shí)現(xiàn)起來并不十分復(fù)雜。當(dāng)然這只是防止用戶提交的手段之一。其他的方法有待大家不斷補(bǔ)充。
          來源參考:Core J2ee patterns 2 


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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南平市| 新郑市| 平度市| 司法| 九寨沟县| 江永县| 巴南区| 平原县| 永康市| 新疆| 竹山县| 曲沃县| 军事| 福泉市| 独山县| 通化县| 清新县| 淮安市| 阳高县| 安吉县| 吴旗县| 台中县| 如皋市| 孟津县| 裕民县| 朝阳县| 京山县| 麻城市| 西和县| 桃园县| 台东市| 吐鲁番市| 葫芦岛市| 太仆寺旗| 城市| 克拉玛依市| 秦皇岛市| 盘锦市| 阿合奇县| 秭归县| 富阳市|