zoukankan      html  css  js  c++  java
  • java中Token验证

    什么是Token:它是一个令牌,随机不可预测的。

    为什么需要使用Token: 1,防止表单的重复提交

    2:,防止跨站点的请求伪造

    Token的使用流程是:首先在服务器端生成一个随机的token值并在服务器端保存起来,然后向客户端请求的过程中把这个Token值传过去。之后页面操作完毕后向服务器提交数据的过程中又把这个Token值传回服务器端,同时比较这个Token值是否已经存在于服务器端,若存在,则此次访问是安全的,并在服务器端把这个Token值删除,若不存在,则此次访问无效。

    好,了解Token的用法之后来看代码(项目中可直接粘贴使用)

    ---------------------------------------------------------------------以下为转载的代码:

    (一)首先是Token工具类

    [java] view plain copy
    1. package com.company.util;  
    2. import java.util.ArrayList;  
    3. import javax.servlet.http.HttpSession;  
    4. public class Token {  
    5. private static final String TOKEN_LIST_NAME = "tokenList";  
    6. public static final String TOKEN_STRING_NAME = "token";  
    7.   
    8. private static ArrayList getTokenList(HttpSession session) {  
    9.        Object obj = session.getAttribute(TOKEN_LIST_NAME);  
    10.        if (obj != null) {  
    11.           return (ArrayList) obj;  
    12.        } else {  
    13.           ArrayList tokenList = new ArrayList();  
    14.           session.setAttribute(TOKEN_LIST_NAME, tokenList);  
    15.           return tokenList;  
    16.        }  
    17.     }  
    18.   
    19. private static void saveTokenString(String tokenStr, HttpSession session) {  
    20.        ArrayList tokenList = getTokenList(session);  
    21.        tokenList.add(tokenStr);  
    22.        session.setAttribute(TOKEN_LIST_NAME, tokenList);  
    23.     }  
    24.   
    25. private static String generateTokenString(){  
    26.        return new Long(System.currentTimeMillis()).toString();  
    27.     }  
    28.   
    29. /** *//** 
    30.      * Generate a token string, and save the string in session, then return the token string. 
    31.      * @param HttpSession session 
    32.      * @return a token string used for enforcing a single request for a particular transaction. 
    33.      */  
    34.   
    35.     public static String getTokenString(HttpSession session) {  
    36.        String tokenStr = generateTokenString();  
    37.        saveTokenString(tokenStr, session);  
    38.        return tokenStr;  
    39.     }  
    40.   
    41. /** *//** 
    42.  
    43.      * check whether token string is valid. if session contains the token string, return true.  
    44.      * otherwise, return false. 
    45.      * @param String tokenStr 
    46.      * @param HttpSession session 
    47.      * @return true: session contains tokenStr; false: session is null or tokenStr is id not in session 
    48.      */  
    49.   
    50.     public static boolean isTokenStringValid(String tokenStr, HttpSession session) {  
    51.        boolean valid = false;  
    52.        if(session != null){  
    53.           ArrayList tokenList = getTokenList(session);  
    54.           if (tokenList.contains(tokenStr)) {  
    55.              valid = true;  
    56.              tokenList.remove(tokenStr);  
    57.           }  
    58.        }  
    59.        return valid;  
    60.     }  
    61. }  



    (二)JSP页面中

    1:先import该Token工具类

    [java] view plain copy
    1. <%@ page import="com.company.util.Token" %>  

    2:在表单中添加隐藏的Token值

    [html] view plain copy
    1. <form>  
    2.     <input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>">  
    3. </form>  

    (三)在服务器端Servlet中添加如下代码

    [java] view plain copy
      1. if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){  
      2.     //To Do 业务代码  
  • 相关阅读:
    Velocity(7)——#foreach指令
    如何修改Struts2 FiledError样式
    Mysql:User does not have access to metadata required to determine stored procedure parameter types.
    Velocity(8)——引入指令和#Stop指令
    GUI设计禁忌 之一 ——使用了错误的控件
    GUI设计禁忌——基本原则
    Velocity(9)——宏
    CentOS NFS配置
    Velocity(10)——指令的转义
    从HTML到SSI框架
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/7895625.html
Copyright © 2011-2022 走看看