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

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

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

    風行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    利用token防止重復提交

    Posted on 2005-07-26 17:10 風太少 閱讀(712) 評論(0)  編輯  收藏
    在編寫web應用程序時,經常會遇到這樣的情況:由于網速慢等諸多原因,用戶刷新了好幾次頁面,造成多次遞交。
    struts中利用token可以來防止這種情況的發生。以增加一本書的紀錄舉例如下:

    struts通常鼓勵采用這樣的流程--
    用 戶 || ||調用 \/ EditBookAction || ||初始化form并跳轉 \/ book.jsp || ||遞交 \/ SaveBookAction 使用token方法如下-- a.在EditBookAction中調用saveToken(request)方法。 b.在SaveBookAction中檢驗:isTokenValid(request),如為true, resetToken(request).為false按錯誤處理。代碼如下: if (!isTokenValid(request)) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.transaction.token")); } resetToken(request);
    利用Token解決重復重復提交:
    Struts利用同步令牌(Token)的方式來解決Web應用中重復提交的問題,其機制是在form表單中增加一個隱藏的域,保存當前令牌值,然后在程序中判斷此令牌值是否合法.
    org.apache.struts.action.Action類提供了相關操作Token的方法:
    1、isTokenValie方法:
    判斷存儲在當前用戶會話中的令牌值和請求參數中的令牌值是否匹配.如果匹配,返回true,反之返回false.只要符合下列情況之一的,就會返回false:
    不存在HttpSession對象;
    在session范圍內沒有保存令牌值;
    在請求參數中沒有令牌值;
    存儲在當前用戶session范圍內的令牌值和請求參數中的令牌值不匹配.
    2、resetToken方法:
    從當前session范圍內刪除令牌屬性.
    3、saveToken方法:
    創建一個新的令牌,并把它保存在當前session范圍內.如果HttpSession不存在,就首先創建一個HttpSession對象.

    如何利用上述方法應用令牌機制解決重復提交問題:
    以用戶注冊為例:
    在用戶請求newUser.jsp之前,首先把請求轉發到PrepareAction,PrepareAction 調用saveToken方法,創建一個新的令牌,并將令牌值保存在當前HttpSession中(新創建的),PrepareAction接著把請求轉發給newUser.jsp.

    newUser.jsp中的<html:form>標簽自動判斷在session范圍內是否存在Token,如果存在,就自動在表單中生成一個包含Token信息的隱藏字段,例如:
    <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="....">

    在用戶提交表單后,由InsertUserAction處理請求.在InsertUserAction中,調用isTokenValid方法,判斷當前用戶會話中的令牌值和請求參數中的令牌值是否匹配.如果匹配,就調用resetToken方法,刪除Token,然后執行插入數據操作.如果不匹配,返回相關錯誤提示,進行相關操作.

    OK.醬紫就可以有效放置重復提交了.

    如何在不使用Struts的前提下利用令牌機制解決重復提交問題:
    Struts的令牌機制有幾個要點可以讓我們在普通的JSP/Servlet中解決重復提交問題.
    1、提供幾個操作Token的相關方法:
    關鍵有三個:
    resetToken(HttpServletRequest request)-->重置令牌值.
    saveToken(HttpServletRequest request)-->保存令牌值.
    isTokenValid(HttpServletRequest request)-->檢測令牌是否合法.

    2、在form表單中增加隱藏域,保存當前令牌值.

    3、在執行持久性數據操作之前調用相關方法判斷當前令牌是否合法,之后在進行相關操作.

    方法是相同的,只是實現的方式不太一樣.

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲第一区在线观看| 暖暖日本免费在线视频| 亚洲精品无码永久中文字幕| 一区二区三区免费视频观看| 亚洲国产中文字幕在线观看| 香蕉97碰碰视频免费| 亚洲精品无码99在线观看 | 亚洲日韩中文字幕天堂不卡 | a级毛片免费高清毛片视频| 青青久久精品国产免费看| 无码人妻AV免费一区二区三区| 成人毛片免费观看视频大全| 久久久精品国产亚洲成人满18免费网站| 亚洲国产综合91精品麻豆| 久久大香香蕉国产免费网站| 亚洲成电影在线观看青青| 久久久久久99av无码免费网站| 浮力影院亚洲国产第一页| 免费毛片在线看不用播放器 | 亚洲欧美在线x视频| 亚洲AV无码乱码在线观看| 国产精品美女免费视频观看| 成年私人影院免费视频网站| 亚洲国产精品成人午夜在线观看| 在线观看免费国产视频| 一级大黄美女免费播放| 亚洲人成网址在线观看| 欧美日韩国产免费一区二区三区| 亚洲AV成人无码网站| 免费大片黄在线观看yw| 特黄aa级毛片免费视频播放| 亚洲乱码日产一区三区| 91手机看片国产永久免费| 午夜在线亚洲男人午在线| 亚洲国产精彩中文乱码AV| www免费黄色网| 久久久久久亚洲精品成人| 国产自国产自愉自愉免费24区| 亚洲精品午夜在线观看| 无码人妻一区二区三区免费看| 亚洲中文字幕无码久久|