日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JAVA中的Token 基于Token的身份驗證實例

瀏覽:29日期:2022-08-26 13:08:17

最近在做項目開始,涉及到服務器與安卓之間的接口開發,在此開發過程中發現了安卓與一般瀏覽器不同,安卓在每次發送請求的時候并不會帶上上一次請求的SessionId,導致服務器每次接收安卓發送的請求訪問時都新建一個Session進行處理,無法通過傳統的綁定Session來進行保持登錄狀態和通訊狀態。

基于傳統方法無法判斷安卓的每次請求訪問狀態,故查詢資料了解到Token,特殊的身份證驗證。以下是網上搜尋資料所得,作為學習總結資料。

令牌是一種能夠控制站點占有媒體的特殊幀,以區別數據幀及其他控制幀。token其實說的更通俗點可以叫暗號,在一些數據傳輸之前,要先進行暗號的核對,不同的暗號被授權不同的數據操作,下文我們就來詳細的介紹一下關于基于 Token 的身份驗證的教程

最近了解下基于 Token 的身份驗證,跟大伙分享下。很多大型網站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起傳統的身份驗證方法,Token 擴展性更強,也更安全點,非常適合用在 Web 應用或者移動應用上。Token 的中文有人翻譯成 “令牌”,我覺得挺好,意思就是,你拿著這個令牌,才能過一些關卡。

傳統身份驗證的方法

HTTP 是一種沒有狀態的協議,也就是它并不知道是誰是訪問應用。這里我們把用戶看成是客戶端,客戶端使用用戶名還有密碼通過了身份驗證,不過下回這個客戶端再發送請求時候,還得再驗證一下。

解決的方法就是,當用戶請求登錄的時候,如果沒有問題,我們在服務端生成一條記錄,這個記錄里可以說明一下登錄的用戶是誰,然后把這條記錄的 ID 號發送給客戶端,客戶端收到以后把這個 ID 號存儲在 Cookie 里,下次這個用戶再向服務端發送請求的時候,可以帶著這個 Cookie ,這樣服務端會驗證一個這個 Cookie 里的信息,看看能不能在服務端這里找到對應的記錄,如果可以,說明用戶已經通過了身份驗證,就把用戶請求的數據返回給客戶端。Cookie里面存的是sessionID是session記錄的id.

上面說的就是 Session,我們需要在服務端存儲為登錄的用戶生成的 Session ,這些 Session 可能會存儲在內存,磁盤,或者數據庫里。我們可能需要在服務端定期的去清理過期的 Session 。

基于 Token 的身份驗證方法

使用基于 Token 的身份驗證方法,在服務端不需要存儲用戶的登錄記錄。大概的流程是這樣的:

客戶端使用用戶名跟密碼請求登錄

服務端收到請求,去驗證用戶名與密碼

驗證成功后,服務端會簽發一個 Token,再把這個 Token 發送給客戶端

客戶端收到 Token 以后可以把它存儲起來,比如放在 Cookie 里或者 Local Storage 里

客戶端每次向服務端請求資源的時候需要帶著服務端簽發的 Token

服務端收到請求,然后去驗證客戶端請求里面帶著的 Token,如果驗證成功,就向客戶端返回請求的數據

JWT

實施 Token 驗證的方法挺多的,還有一些標準方法,比如 JWT,讀作:jot ,表示:JSON Web Tokens 。JWT 標準的 Token 有三個部分:

header

payload

signature

中間用點分隔開,并且都會使用 Base64 編碼,所以真正的 Token 看起來像這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

Header

header 部分主要是兩部分內容,一個是 Token 的類型,另一個是使用的算法,比如下面類型就是 JWT,使用的算法是 HS256。

{ 'typ': 'JWT', 'alg': 'HS256'}

上面的內容要用 Base64 的形式編碼一下,所以就變成這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload

Payload 里面是 Token 的具體內容,這些內容里面有一些是標準字段,你也可以添加其它需要的內容。

下面是標準字段:

iss:Issuer,發行者 sub:Subject,主題 aud:Audience,觀眾 exp:Expiration time,過期時間 nbf:Not before iat:Issued at,發行時間 jti:JWT ID

比如下面這個 Payload ,用到了 iss 發行人,還有 exp 過期時間。另外還有兩個自定義的字段,一個是 name ,還有一個是 admin 。

{ 'iss': 'ninghao.net', 'exp': '1438955445', 'name': 'wanghao', 'admin': true}

使用 Base64 編碼以后就變成了這個樣子:

eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ

Signature

JWT 的最后一部分是 Signature ,這部分內容有三個部分,先是用 Base64 編碼的 header.payload ,再用加密算法加密一下,加密的時候要放進去一個 Secret ,這個相當于是一個密碼,這個密碼秘密地存儲在服務端。

header

payload

secret

var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);

HMACSHA256(encodedString, ’secret’);

處理完成以后看起來像這樣:

SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

最后這個在服務端生成并且要發送給客戶端的 Token 看起來像這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

客戶端收到這個 Token 以后把它存儲下來,下回向服務端發送請求的時候就帶著這個 Token 。服務端收到這個 Token ,然后進行驗證,通過以后就會返回給客戶端想要的資源。

補充知識:JAVA后端生成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 block e.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 基于Token的身份驗證實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本午夜精品视频在线观看| 婷婷精品在线| 超碰在线99| 国产中文欧美日韩在线| 另类综合日韩欧美亚洲| 久久精品色播| 日韩一区二区三区免费播放| 日韩免费av| 午夜国产一区二区| 久久福利毛片| 鲁大师影院一区二区三区| 热久久免费视频| 色8久久久久| 国产精品久久久久久久免费软件 | 国产精品欧美在线观看| 国产精品久久久久久久免费软件| 欧美黑人做爰爽爽爽| а√在线中文在线新版| 美女网站一区| 视频一区视频二区中文| 日本va欧美va精品| 精品国产亚洲一区二区三区在线 | 国产a亚洲精品| 日韩一区二区三区在线免费观看| 日韩午夜免费| 国产探花一区| 日韩伦理一区| 日本欧洲一区二区| 国产精品三p一区二区| 亚洲欧洲高清| 麻豆精品91| 欧美国产免费| 久久一区二区三区电影| 中文在线日韩| 黄色精品视频| 不卡中文一二三区| 日本不卡一区二区三区| 国产suv精品一区二区四区视频| 成人久久一区| 日韩高清中文字幕一区| 亚洲精品福利电影| 最新国产精品视频| 狠狠久久伊人中文字幕| 一区在线视频观看| 国产精品亚洲人成在99www| 久久精品亚洲人成影院| 少妇精品在线| 午夜精品成人av| 综合激情视频| 日韩欧美另类一区二区| 亚洲一区欧美| 国产suv精品一区二区四区视频| 欧美精选一区二区三区| 国产毛片精品| 午夜欧美精品| 国产精品观看| 欧美va天堂在线| 国产精品中文字幕制服诱惑| 欧美日韩精品一区二区视频| 日本电影久久久| 免费国产自久久久久三四区久久| 欧美日韩午夜| 亚洲精品一区二区在线看| 国产精品久久久一区二区| 一区在线观看| 正在播放日韩精品| 色8久久久久| 日韩欧美少妇| 久久99免费视频| 中文字幕视频精品一区二区三区| 日韩国产专区| 国产精品videossex久久发布 | 久久久久久免费视频| 久久黄色影视| 红桃视频国产一区| 日韩av二区| 国产精品日本一区二区不卡视频 | 中文字幕av一区二区三区人| 私拍精品福利视频在线一区| 国产精品久久久网站| 亚洲精品韩国| 亚洲一区中文| 99久久久久| 精品视频一二| 青青草国产精品亚洲专区无| 亚洲高清影视| 久久久成人网| 精品91福利视频| 国产精品伊人| 日韩国产91| 亚洲精品影视| 免费在线看一区| 日韩亚洲在线| 欧美一区二区三区激情视频 | 亚洲h色精品| 狠狠久久伊人| 国产精品久久国产愉拍| 日本aⅴ精品一区二区三区| 亚洲欧美视频| 99视频一区| 精品一区毛片| 国产一在线精品一区在线观看| 成人午夜精品| 啪啪国产精品| 亚洲电影有码| 久久久久国产精品一区三寸| 日韩伦理福利| 蜜桃成人精品| 久久九九电影| 视频小说一区二区| 神马午夜久久| 欧美午夜精彩| 国产精品88久久久久久| 国户精品久久久久久久久久久不卡| 欧美13videosex性极品| 四虎成人av| 国产高潮在线| 亚洲成人不卡| 99久久激情| 午夜精品婷婷| 亚洲欧美日本国产专区一区| 亚洲免费中文| 中文字幕亚洲精品乱码| 一区二区精品| 天堂va在线高清一区| 亚洲精品影院在线观看| 亚洲精品人人| 亚洲精品亚洲人成在线观看| 亚洲精品一级| 欧美日韩调教| 蜜桃精品视频| 91视频久久| 久久亚洲专区| 视频一区在线视频| 日韩精品中文字幕一区二区| 欧美亚洲二区| 免费一区二区三区在线视频| 国产在线一区不卡| 日韩精品一区二区三区免费观影| 欧美1区免费| 人人爽香蕉精品| 久久国产婷婷国产香蕉| 欧美激情亚洲| 中文在线免费视频| 狠狠干综合网| 日韩高清一区| 久久99影视| 国产v综合v| 99在线精品免费视频九九视| 亚洲一区二区三区无吗| 欧美啪啪一区| 毛片在线网站| 黄色av一区| 91九色综合| 91偷拍一区二区三区精品| 亚洲激情久久| 欧美一区二区三区久久| 91一区二区| 国产精品婷婷| 国产一区 二区| 日韩理论片av| 石原莉奈在线亚洲二区| 91嫩草精品| 日韩精品2区| 男女性色大片免费观看一区二区| 日韩精品亚洲一区二区三区免费| 精品免费av| 国产亚洲在线| 国产精品v亚洲精品v日韩精品 | 精品在线91| 欧美在线看片| 久久精品91| 日本午夜精品| 精精国产xxxx视频在线播放| 伊人久久成人| 国产精品蜜月aⅴ在线| 99精品一区| 91国内精品| 91精品啪在线观看国产18| 综合一区二区三区| 激情国产在线| 日韩精品免费一区二区夜夜嗨| sm久久捆绑调教精品一区| 亚洲午夜久久| 伊人久久在线| 国产亚洲欧美日韩精品一区二区三区| 日韩久久精品| 91av一区| 欧美精品羞羞答答| 欧美亚洲专区| 欧美在线资源| 成人国产综合| 综合亚洲自拍| 色爱av综合网| 国产精品18| 亚洲人亚洲人色久| 日韩免费小视频| 国产欧美久久一区二区三区| 亚洲二区三区不卡| 国产成人精品福利|