JAVA後端產生Token(令牌),用於校正用戶端,防止重複提交

來源:互聯網
上載者:User

標籤:generate   seq   lang   details   iges   article   servlet   簡單   too   

轉:79390980轉:78931420 
AVA後端產生Token(令牌),用於校正用戶端,防止重複提交

1.概述:在web項目中,服務端和前端經常需要互動資料,有的時候由於網路相應慢,用戶端在提交某些敏感性資料(比如按照正常的商務邏輯,此份資料只能儲存一份)時,如果前端多次點擊提交按鈕會導致提交多份資料,這種情況我們是要防止發生的。

2.解決方案:

①前端處理:在提交之後通過js立即將按鈕隱藏或者置為不可用。

②後端處理:對於每次提交到背景資料必須校正,也就是通過前端攜帶的令牌(一串唯一字串)與後端校正來判斷當前資料是否有效。

3.總結:第一種方法相對來說比較簡單,但是安全係數不高,第二種方法從根本上解決了問題,所以我推薦第二種方法

** * 產生Token的工具類: */package red.hearing.eval.modules.token; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random; import sun.misc.BASE64Encoder; /** * 產生Token的工具類 * @author zhous * @since 2018-2-23 13:59:27 * */public class TokenProccessor { private TokenProccessor(){}; private static final TokenProccessor instance = new TokenProccessor(); public static TokenProccessor getInstance() {return instance;} /** * 產生Token * @return */public String makeToken() {String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + ""; try {MessageDigest md = MessageDigest.getInstance("md5");byte md5[] =  md.digest(token.getBytes());BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(md5);} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} return null;}}

  

/** *  */package red.hearing.eval.modules.token; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; /** * Token的工具類 * @author zhous * @since 2018-2-23 14:01:41 * */public class TokenTools {/** * 產生token放入session * @param request * @param tokenServerkey */public static void createToken(HttpServletRequest request,String tokenServerkey){String token = TokenProccessor.getInstance().makeToken();request.getSession().setAttribute(tokenServerkey, token);}/** * 移除token * @param request * @param tokenServerkey */public static void removeToken(HttpServletRequest request,String tokenServerkey){request.getSession().removeAttribute(tokenServerkey);}/** * 判斷請求參數中的token是否和session中一致 * @param request * @param tokenClientkey * @param tokenServerkey * @return */public static boolean judgeTokenIsEqual(HttpServletRequest request,String tokenClientkey,String tokenServerkey){String token_client = request.getParameter(tokenClientkey);if(StringUtils.isEmpty(token_client)){return false;}String token_server = (String) request.getSession().getAttribute(tokenServerkey);if(StringUtils.isEmpty(token_server)){return false;}if(!token_server.equals(token_client)){return false;}return true;}}

  

JAVA後端產生Token(令牌),用於校正用戶端,防止重複提交

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.