天天看點

Java | 分布式——JWT加密

一、分布式Session共享

Session是伺服器用來儲存使用者操作的一系列會話資訊,由Web容器進行管理。單機情況下,不存在Session共享的情況,分布式情況下,如果不進行Session共享會出現請求落到不同機器要重複登入的情況:在一些需要使用者登入的網站下,如果因為用送出的請求給到了不同的伺服器進行處理,而需要讓使用者重複登入,這是一件非常扯蛋的操作。是以必須讓所有伺服器都能準确判斷請求屬于哪個使用者。

一般來說解決Session共享有以下幾種方案:

Tomcat廣播風暴(占用資源,不推薦)

redis統一存儲token(推薦)

JWT加密

本文主要介紹JWT加密的方法,JWT(Json web token)是通過HMAC算法或者RSA的公鑰密鑰簽名生成攜帶使用者資訊的token,将token存放在用戶端中(可以存儲在cookie,localstorage和sessionStorage中),用戶端每次發送請求,都攜帶token,服務端通過解密來擷取使用者資訊。

優點:

token包含使用者的基本資訊,避免再次查庫;

token存儲在用戶端,不占用伺服器資源。

缺點:

token經過base64編碼,可以被解碼,是以不能包含使用者敏感資訊(使用者權限、密碼等);

伺服器無存儲,是以不能做登入失效處理,除非更改伺服器密鑰。

JWT格式包括3類,下面是一段JWT:

頭部:主要是描述簽名算法;

負載:主要是描述加密對象的資訊,主要描述是加密對象的資訊,如使用者的id等,也可以加些規範裡面的東西,如iss 簽發者,exp 過期時間,sub 面向的使用者;

簽名:主要是把前面兩部分進行加密,防⽌别⼈拿到token進行base解密後篡改token。

在SSM架構中,JWT的使用方法:

添加依賴(POM.xml)

添加工具類,開發:生産token方法、校驗token方法

相關類中調用

1、登入時生成token。

2、私有網頁,攔截器攔截驗證(不包括登入和注冊頁面請求)。