1. 程式人生 > >Token技術的功能及實現

Token技術的功能及實現

Token功能及其技術及其實現

目前就知道Token功能就兩種:

1.防止表單重複提交

2.用來作身份驗證

1.下面來介紹其用法

這裡寫圖片描述

下面根據以上流程用程式碼演示
我寫了兩個頁面 一個是主頁 會跳轉到新增頁面 第二個是新增頁面 模擬使用者提交資料場景
這裡寫圖片描述
說明下 token一般放在隱藏域中 在這裡方便大家看 沒有隱藏
這裡寫圖片描述
主要說明下後臺的程式碼
token其實只要是任何字串都行 這裡用到的是uuid 是通用唯一識別碼,而且每次請求到新增頁面都會生成不同的uuid(token)

//跳轉到新增頁面
    @RequestMapping("/add.do")
    public
String add(HttpServletRequest request,HttpServletResponse response){ //生成token UUID token=UUID.randomUUID(); System.out.println("token的值"+token); //放入session中 request.getSession().setAttribute("token", token.toString()); //放入request作用域中傳到前臺 request.setAttribute("token"
, token); return "add"; } //前臺穿過來的token進行比對 @RequestMapping("/addMessage.do") public synchronized String addMessage(HttpServletRequest request){ //獲取session中的token Object token1=request.getSession().getAttribute("token"); //獲取前臺穿過來的token String token=request.getParameter("token"
); System.out.println("token1的值"+token1); if(token1==null){ System.out.println("提交出錯"); } else if(!token1.equals(token)){ System.out.println("提交出錯"); }else{ System.out.println("提交成功"); //移除session 防止重複提交 request.getSession().removeAttribute("token"); } return ""; }

後臺顯示結果

token的值589a5d93-ceab-4b95-9820-b9e6d980be6f
token1的值589a5d93-ceab-4b95-9820-b9e6d980be6f
提交成功

2.基於Token的身份驗證

使用基於 Token 的身份驗證方法,在服務端不需要儲存使用者的登入記錄。大概的流程是這樣的:
1.客戶端使用使用者名稱跟密碼請求登入
2.服務端收到請求,去驗證使用者名稱與密碼驗證成功後,服務端會簽發一個 Token,再把這個 Token 傳送給客戶端
3.客戶端收到 Token 以後可以把它儲存起來,比如放在 Cookie 裡或者 Local Storage 裡客戶端每次向服務端請求資源的時候需要帶著服務端簽發的 Token服務端收到請求,然後去驗證客戶端請求裡面帶著的 Token,如果驗證成功,就向客戶端返回請求的資料
看過一篇文章好像ofo裡面也有用到Token。目前只知道這麼多了,有問題的都可以評論,留言指出大家共同進步。