1. 程式人生 > >Github開源專案guns的jwt介面開發使用

Github開源專案guns的jwt介面開發使用

      介面安全是至關重要的,一直在學習框架並寫介面,面對各種攻擊以及非法訪問,我們要做一些防護措施。最近,想自己做移動端的東西,免不了考慮介面安全,初次瞭解jwt,並一次次的摸索,也是有了一些瞭解。       而後看到github上有一個整合springboot+ssm+mybatis plus +shiro的guns開源專案,下載下來以後他的目錄結構是非常清晰的。此處我們只看guns-rest模組,也就是移動端介面的開發使用。       (對於jwt的理解還不夠深刻,不足之處還望見教。)如下是想的目錄結構: 在這裡插入圖片描述       首先我們來看下專案大致流程,在com.stylefeng.guns.rest.modular.auth.controller;

中有一個AuthController,這個controller就是前端請求用來生成token的,目前這個例子傳的引數是AuthRequest類,裡面有username和password兩個屬性,這是需要傳入的使用者名稱和密碼。 然後裡面驗證是boolean validate = reqValidator.validate(authRequest);這句話,我們找這個介面,他有兩個實現類SimpleValidator(靜態定義資料的驗證)DbValidator(從資料庫拿到值做驗證對比),驗證成功以後,會生成token和randomKey,這兩個值就是返回資料。      接下來我們看com.stylefeng.guns.rest.modular.auth.filter;
下的AuthFilter,他是攔截除了AuthController以外所有的請求路徑,這時候就需要我們在post請求的header頭部傳入token,驗證token是否正確才會繼續執行。而token相應的key也就是名字是在com.stylefeng.guns.rest.config.properties;JwtProperties中定義的。我們看這個配置類中有private String header = "Authorization";這樣一句,故而名字為Authorization,而傳入的token還需要帶上Bearer ,這是jwt的規範,而AuthFilter對此也做了驗證。     &ensp繼續com.stylefeng.guns.rest.modular.example;
下有個例子,我們開啟會發現這裡傳入了一個類SimpleObject的物件,SimpleObject類裡面定義了一些測試屬性。我們開啟maven的test,就是測試下面,找到com.stylefeng.guns.jwt;下的DecryptTest類,這個類模擬了生成需要傳入的前端資料。最終傳入的是BaseTransferEntity類,這個類是在com.stylefeng.guns.rest.modular.auth.converter;下,裡面有一個object屬性,就是我們需要傳入的資料,sign屬性就是簽名,驗證資料是否合法。     &ensp我們來看一下DecryptTest,看一下資料是如何處理的。首先是將所需要傳的資料生成一個simpleObject物件,也就是一個json。接著將他tostring變為字串,再轉為base64編碼,這就生成了需要傳入的第一項object。第二項是將這串base64編碼進行md5加密生成簽名(sign),鹽值就是我們請求AuthController拿到的randomKey(這是隨機生成的六位字串)。     &ensp在com.stylefeng.guns.rest.modular.auth.converter;下的WithSignMessageConverter將我們傳入的object和sign進行簽名驗證,並解析object中的資料。然後再繼續執行到controller拿到資料。     &ensp流程基本是這樣,其中所用到的一些類以及方法仔細揣摩可以看懂的。     &ensp文筆有些粗糙,講解多有不到之處。我在demo中加入了自己對於許可權的一些理解,並做了一些整改。將簽名驗證改成了過濾器,並加上了許可權控制的過濾器。(本人一名小白,程式碼寫的十分粗糙,還有一些沒有修整完備) demo百度雲地址: 連結:https://pan.baidu.com/s/1_qi3BIwMIHZiCvuDHSAXIw 提取碼:s16i