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

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

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

    posts - 60,comments - 71,trackbacks - 0
    from: http://m.tkk7.com/mashiguang/archive/2007/08/21/138324.html

    Struts本身有一套完善的防止重復提交表單Token(令牌)機制,但筆者目前的項目自寫的framework沒有用到Struts,故也得自寫防止用戶因為后退或者刷新來重復提交表單內容的Token機制。不難,容易實現。

    實現原理:一致性。jsp生成表單時,在表單中插入一個隱藏<input>字段,該字段就是保存在頁面端的token字符串,同時把該字符串存入session中。等到用戶提交表單時,會一并提交該隱藏的token字符串。在服務器端,查看下是否在session中含有與該token字符串相等的字符串。如果有,那么表明是第一次提交該表單,然后刪除存放于session端的token字符串,再做正常業務邏輯流程;如果沒有,那么表示該表單被重復提交,做非正常流程處理,可以警告提示也可以什么也不做。

    看代碼。

    首先是Token主類。類很簡單,而且主要方法都給doc注釋了

    /*
    * blog: 
    http://hi.baidu.com/bobylou
    * $Revision: 1.1 $
    * $Date: 2007/07/18 10:02:55 $
    * $Author: bobrow$
    */


    package com.paizuo.framework.util;

    import java.util.ArrayList;

    import javax.servlet.http.HttpSession;

    public class Token {

        
    private static final String TOKEN_LIST_NAME = "tokenList";

        
    public static final String TOKEN_STRING_NAME = "token";

        
    private static ArrayList getTokenList(HttpSession session) {
           Object obj 
    = session.getAttribute(TOKEN_LIST_NAME);
           
    if (obj != null{
              
    return (ArrayList) obj;
           }
     else {
              ArrayList tokenList 
    = new ArrayList();
              session.setAttribute(TOKEN_LIST_NAME, tokenList);
              
    return tokenList;
           }

        }


        
    private static void saveTokenString(String tokenStr, HttpSession session) {
           ArrayList tokenList 
    = getTokenList(session);
           tokenList.add(tokenStr);
           session.setAttribute(TOKEN_LIST_NAME, tokenList);
        }

       
        
    private static String generateTokenString(){
           
    return new Long(System.currentTimeMillis()).toString();
        }


        
    /**
         * Generate a token string, and save the string in session, then return the token string.
         * 
         * 
    @param HttpSession
         *            session
         * 
    @return a token string used for enforcing a single request for a particular transaction.
         
    */

        
    public static String getTokenString(HttpSession session) {
           String tokenStr 
    = generateTokenString();
           saveTokenString(tokenStr, session);
           
    return tokenStr;
        }


        
    /**
         * check whether token string is valid. if session contains the token string, return true. 
         * otherwise, return false.
         * 
         * 
    @param String
         *            tokenStr
         * 
    @param HttpSession
         *            session
         * 
    @return true: session contains tokenStr; false: session is null or tokenStr is id not in session
         
    */

        
    public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
           
    boolean valid = false;
           
    if(session != null){
              ArrayList tokenList 
    = getTokenList(session);
              
    if (tokenList.contains(tokenStr)) {
                 valid 
    = true;
                 tokenList.remove(tokenStr);
              }

           }

           
    return valid;
        }

    }



    怎么使用?

    在jsp頁面端。

    首先import該類:

    <%@ page import="com.paizuo.framework.util.Token" %>

    表單包含隱藏的token字符串:

     

    <form>

    <input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>">

    </form>

     

    在Server端action中進行檢驗。

     

    if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){
    //進行正常業務流程
    }

    else{
    //進行防重復提交處理流程
    }

    完畢。

    posted on 2008-07-14 18:05 henry1451 閱讀(338) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲色少妇熟女11p| 中文无码日韩欧免费视频| 99精品免费观看| 日韩免费一区二区三区在线| 免费夜色污私人影院在线观看| 亚洲成AV人片在WWW| 99re6热视频精品免费观看| 亚洲av成人无码久久精品| 免费国产黄网站在线观看动图| aⅴ免费在线观看| 亚洲国产精品久久久久秋霞影院| 免费A级毛片无码视频| 亚洲手机中文字幕| 无码免费午夜福利片在线| 亚洲av午夜国产精品无码中文字| 亚洲午夜激情视频| 亚洲一区二区三区亚瑟| 免费国产在线观看老王影院| 日本牲交大片免费观看| 国产免费观看青青草原网站| 67pao强力打造67194在线午夜亚洲| free哆拍拍免费永久视频| 亚洲区小说区激情区图片区| 无码人妻久久一区二区三区免费| 九月婷婷亚洲综合在线| 亚洲中文字幕一区精品自拍| 国产午夜无码视频免费网站| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲精品国产品国语在线| 日韩免费电影网站| 伊人久久大香线蕉亚洲五月天| 亚洲AV成人无码网天堂| 亚洲色偷偷狠狠综合网| 无码免费一区二区三区免费播放| 亚洲五月综合网色九月色| 亚洲AV无码乱码在线观看| 久久青草免费91线频观看站街| 亚洲欧洲日韩国产一区二区三区| 亚洲成人国产精品| 4虎1515hh永久免费| 亚洲精品动漫在线|