<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    Struts的Token(令牌)機制能夠很好的解決表單重復提交的問題,基本原理是:服務器端 在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后,且在答復發送給客戶端之前,將會 產生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的 令牌就和服務器端的令牌不一致,從而有效地防止了重復提交的發生。

    這時其實也就是兩點,第一:你需要在請求中有這個令牌值,請求中的令牌值如何保存,其實就和我們平時在頁面中保存一些信息是一樣的,通過隱藏字段來保 存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉,這個value是TokenProcessor類中的 generateToken()獲得的,是根據當前用戶的session id和當前時間的long值來計算的。第二:在客戶端提交后,我們要根據判斷在請求中包含的值是否和服務器的令牌一致,因為服務器每次提交都會生成新的 Token,所以,如果是重復提交,客戶端的Token值和服務器端的Token值就會不一致。下面就以在數據庫中插入一條數據來說明如何防止重復提交。


    首先:要在表單頁的上一個控制頁面,也就是說,如果想用表單提交時,要先利用sturts的轉發機制,從一個action轉到表單頁,在這個轉發 action中,要定義一個“令牌” 很簡單, saveToken(request);然后再由此ACTION轉向到實際錄入擁有FORM的頁面,由此FORM頁面再向下一個ACTION提交。(這時 會在表單頁自動生成一個hidden 保存了一個和時間相關的計算值)
    其次 : 在表單提交后的action中,進行一個判斷 if(isTokenValid(reqeust)) 如果表單提交的串值與session中的相符那就完成動作,同時session清空此串值(restToken(request);)。此時如果后退再提交,就出錯,同時再次改寫saveToken返回目的頁,如錄入或者主頁面。

    1 . <html:link page="/tokenaction.do?token=insertUser">用戶注冊</html:link>

    2.<action path="/tokenaction" type="com.token.action.PreInsert" parameter="token">
    <forward name="regUser" path="/reguser.jsp"></forward>
    </action>

    3. public class PreInsert extends DispatchAction {
    public ActionForward insertUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    this.saveToken(request);
    return mapping.findForward("regUser");

    }
    }

    4.<html:form action="/reguser">

    5. <action attribute="regForm" input="/reguser.jsp" name="regForm"
    path="/reguser" scope="request"
    type="com.token.struts.action.RegAction" validate="false" >
    <forward name="mutiSubmit" path="/reguser.jsp"></forward>
    </action>

    6. RegAction類excute方法內

    ApplicationResources.properties :error.mutiSubmit=<script>alert("you shouldn't submit form twice !");</script>

    ActionMessages errors=new ActionMessages();
    if(!this.isTokenValid(request)){
    errors.add("mutiSubmit",new ActionMessage("error.mutiSubmit"));
    this.saveErrors(request, errors);
    return mapping.findForward("mutiSubmit");
    }else{
    this.resetToken(request);
    ……..
    }

    驗證 (application.properties)


    命令 native2ascii –encoding gbk f:"1.txt f:"2.txt
    username="u7528"u6237"u540d :
    password="u5bc6"u7801 :
    name.error=<script>alert(""u7528"u6237"u540d"u4e0d"u80fd"u4e3a"u7a7a!");</script>
    name.length=<script>alert(""u7528"u6237"u540d"u957f"u5ea6"u5fc5"u987b"u662f6-12"u4f4d!");</script>
    pwd.error=<script>alert(""u5bc6"u7801"u4e0d"u80fd"u4e3a"u7a7a!");</script>

    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {

    ActionErrors errors = new ActionErrors();
    if(username==null||username.equals("")){
    errors.add("user",new ActionMessage("name.error"));
    return errors;
    }
    if(username.length()<6||username.length()>12){
    errors.add("userlength", new ActionMessage("name.length"));
    request.setAttribute("usercheck",username);
    return errors;
    }
    if(password==null||password.equals("")){
    errors.add("pass",new ActionMessage("pwd.error"));
    return errors;
    }
    return errors;
    }
    posted on 2008-07-30 16:55 seal 閱讀(523) 評論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 亚洲AV无码AV男人的天堂不卡| 最近免费字幕中文大全视频| 亚洲国产精品线观看不卡| 亚洲国产综合精品中文字幕| 69免费视频大片| 成人无码精品1区2区3区免费看| 亚洲最大天堂无码精品区| 亚洲人成在线影院| 亚洲国产精品无码久久久久久曰 | 国产免费观看a大片的网站| 很黄很黄的网站免费的| 免费视频一区二区| 国产免费牲交视频免费播放| 亚洲高清毛片一区二区| 亚洲国产成人九九综合| 亚洲成熟xxxxx电影| 在线观看亚洲av每日更新| 四虎永久在线精品免费观看地址| 亚洲免费网站观看视频| 91福利视频免费观看| 久久久久久一品道精品免费看| 久久国产精品免费| 日本激情猛烈在线看免费观看| 亚洲а∨精品天堂在线| 一本天堂ⅴ无码亚洲道久久| 亚洲成a人片在线观看播放| 亚洲国产成人久久综合碰碰动漫3d| 亚洲中文字幕无码一区| 亚洲精品国产高清不卡在线| 四虎永久在线精品免费观看地址 | 亚洲成?v人片天堂网无码| 日韩一区二区在线免费观看 | 美女视频黄免费亚洲| 91亚洲国产成人久久精品| 亚洲精品国产电影午夜| 久久精品国产亚洲av麻豆色欲 | 亚洲一卡2卡3卡4卡5卡6卡 | 可以免费看黄视频的网站| 亚洲免费视频播放| 91免费国产在线观看| 无码区日韩特区永久免费系列|