jwt實現

王營90發表於2020-12-02

基於jwt token的實現

放棄以前的seesion,cookie 體系,使用token完成使用者認證,實現前後端的使用者同步。
  • 如何實現前後端只傳遞 token 而完成 登入使用者的認證與同步。

1、登陸時,生成token,並在redis中儲存(以token為key,以使用者資訊為value,並設定key的過期時間)。然後把token資訊傳遞給前端,並在前端儲存。
2、每一次前端請求要求把token帶回給後端(axios.js等框架可以全域性設定請求頭引數,即設定一個請求頭的值為token)
3、後端設定一個攔截器,攔截所有請求,然後從請求頭中獲取token,並從redis中獲取此redis.get(token)的資訊。若在redis中能夠獲取到資訊,說明此token存在並沒有過期,即可通過請求;否則,拒絕請求。

  • 整合shiro

只需要在realm中AuthenticationInfo 方法中進行token的認證和使用者名稱的認證即可。

redis 代替 shiro框架

shiro本質上就是一個跑在後臺的一個集合類,這個集合類裡面包含了使用者資訊,角色資訊,許可權資訊。可以使用redis來代替shiro的功能。
  • 實現

1、登陸時,生成token,並在redis中儲存;以token為key儲存為hash資料結構,並設定key的過期時間,hash裡面儲存使用者資訊,角色資訊,許可權資訊;然後把token資訊傳遞給前端,並在前端儲存。
2、每一次前端請求要求把token帶回給後端(axios.js等框架可以全域性設定請求頭引數,即設定一個請求頭的值為token)
3、後端設定一個攔截器,攔截所有請求,然後從請求頭中獲取token,並從redis中獲取此redis.get(token)的資訊。若在redis中能夠獲取到資訊,說明此token存在並沒有過期,即可通過請求;否則,拒絕請求。
4、驗證許可權 :可以自定義一個註解,用於許可權的驗證;然後再寫一個aop切面或者攔截器,用來解析自定義註解;檢視註解裡的許可權字串是否存在於reids裡。
【注意】最好設定一個全域性response類,作為請求的返回值

相關文章