BCrypt加密怎么存入数据库_第6天 密码加密与微服务鉴权JWT(下)
上篇:
Gavin:第6天 密碼加密與微服務(wù)鑒權(quán)JWT(上)?zhuanlan.zhihu.com- 能夠使用BCrypt密碼加密算法實現(xiàn)注冊與登陸功能
- 能夠說出常見的認(rèn)證機制
- 能夠說出JWT的組成部分,以及使用JWT的優(yōu)點
- 能夠使用JJWT 創(chuàng)建和解析token
- 能夠使用JJWT完成微服務(wù)鑒權(quán)
四、Java的JJWT實現(xiàn)JWT
1、什么是JJWT
JJWT是一個提供端到端的JWT創(chuàng)建和驗證的Java庫。永遠(yuǎn)免費和開源(Apache License,版本2.0),JJWT很容易使用和理解。它被設(shè)計成一個以建筑為中心的流暢界面,隱藏了它的大部分復(fù)雜性。
2、JJWT快速入門
(1) 在tensquare_common子模塊的pom文件引入jjwt依賴
tensquare_parent2020tensquare_commonpom.xml<?(2)編寫jjwt生成令牌的測試類
tensquare_parent2020tensquare_commonsrctestjavacomtensquarejwtCreateJwt.java
package(3)debug運行程序
若再次運行,會發(fā)現(xiàn)每次運行的結(jié)果是不一樣的,因為我們的載荷中包含了時間。
2、token的解析
我們剛才已經(jīng)創(chuàng)建了token ,在web應(yīng)用中這個操作是由服務(wù)端進(jìn)行然后發(fā)給客戶端,客戶端在下次向服務(wù)端發(fā)送請求時需要攜帶這個token(這就好像是拿著一張門票一樣),那服務(wù)端接到這個token 應(yīng)該解析出token中的信息(例如用戶id),根據(jù)這些信息查詢數(shù)據(jù)庫返回相應(yīng)的結(jié)果。
(1)創(chuàng)建ParseJwtTest
tensquare_parent2020tensquare_commonsrctestjavacomtensquarejwtParseJwtTest.javapackage(2)運行程序
試著將token或簽名秘鑰篡改一下,會發(fā)現(xiàn)運行時就會報錯,所以解析token也就是驗證 token
3、 token設(shè)置過期時間
有很多時候,我們并不希望簽發(fā)的token是永久生效的,所以我們可以為token添加一個過期時間。
(1) 創(chuàng)建CreateJwt
tensquare_parent2020tensquare_commonsrctestjavacomtensquarejwtCreateJwt.javapackage運行程序
(2)創(chuàng)建ParseJwtTest類
tensquare_parent2020tensquare_commonsrctestjavacomtensquarejwtParseJwtTest.javapackage運行程序,如圖所示:
到了時間再次運行將會報錯,如圖所示:
4、token添加自定義屬性
(1)CreateJwt 類添加
tensquare_parent2020tensquare_commonsrctestjavacomtensquarejwtCreateJwt.javapackage運行程序
(2)創(chuàng)建ParseJwtTest類
tensquare_parent2020tensquare_commonsrctestjavacomtensquarejwtParseJwtTest.javapackage運行程序,如圖所示:
五、十次方微服務(wù)鑒權(quán)
1、 JWT工具類編寫
需求一:admin登錄生成token
(1)tensquare_common工程,創(chuàng)建util.JwtUtil
tensquare_parent2020tensquare_commonsrcmainjavacomstudyutilJwtUtil.javapackage(2)修改tensquare_user工程的application.yml, 添加配置
tensquare_parent2020tensquare_usersrcmainresourcesapplication.ymlserver:(3)配置bean ,修改tensquare_user工程Application類
tensquare_parent2020tensquare_usersrcmainjavacomtensquareuserUserApplication.javapackage(4)修改AdminController的login方法
tensquare_parent2020tensquare_usersrcmainjavacomtensquareusercontrollerAdminController.java
package(5)測試運行結(jié)果 UserApplication
api測試
2、需求二:token驗證刪除用戶
需求:刪除用戶,必須擁有管理員權(quán)限,否則不能刪除。
前后端約定:前端請求微服務(wù)時需要添加頭信息Authorization ,內(nèi)容為Bearer+空格+token
(1)controller層
tensquare_parent2020tensquare_usersrcmainjavacomtensquareusercontrollerUserController.javapackage(2)service層,業(yè)務(wù)代碼,判斷請求中的頭信息,提取token并驗證權(quán)限
tensquare_parent2020tensquare_usersrcmainjavacomtensquareuserserviceUserService.javapackage運行主程序UserApplication,如圖所示:
postman工具測試,訪問:http://localhost:9008/user/1312587341424103424
權(quán)限不足權(quán)限不足權(quán)限不足,原因是:沒有令牌
3、攔截器的配置
如果我們每個方法都去寫一段代碼,冗余度太高,不利于維護(hù),那如何做使我們的代碼看起來更清爽呢?我們可以將這段代碼放入攔截器去實現(xiàn)
添加攔截器
Spring為我們提供了 org.springframework.web.servlet.handler.HandlerInterceptorAdapter這個適配器, 繼承此類,可以非常方便的實現(xiàn)自己的攔截器。他有三個方法: 分別實現(xiàn)預(yù)處理、后處理(調(diào)用了Service并返回ModelAndView,但未進(jìn)行頁面渲 染)、返回處理(已經(jīng)渲染了頁面) 在preHandle中,可以進(jìn)行編碼、安全控制等處理; 在postHandle中,有機會修改ModelAndView; 在afterCompletion中,可以根據(jù)ex是否為null判斷是否發(fā)生了異常,進(jìn)行日志記錄。(1)創(chuàng)建攔截器類
tensquare_parent2020tensquare_usersrcmainjavacomtensquareuserinterceptorJwtInterceptor.javapackage(2)配置攔截器
tensquare_parent2020tensquare_usersrcmainjavacomtensquareuserconfigInterceptorConfig.java package運行主程序UserApplication,如圖所示:
api測試
控制臺查看:說明攔截器配置成功
4、攔截器驗證token
(1)修改攔截器類 JwtFilter
tensquare_parent2020tensquare_usersrcmainjavacomtensquareuserinterceptorJwtInterceptor.javapackage(2)使用攔截器驗證token測試
tensquare_parent2020tensquare_usersrcmainjavacomtensquareuserserviceUserService.javapackage六、發(fā)布信息驗證Token
1、 用戶登陸簽發(fā) JWT
需求:token添加問題驗證
(1)修改UserController,引入JwtUtil 修改login方法 ,返回token,昵稱,頭像等信息
tensquare_parent2020tensquare_usersrcmainjavacomtensquareusercontrollerUserController.javapackage(3)配置tensquare_qa工程的application.yml文件
tensquare_parent2020tensquare_qasrcmainresourcesapplication.ymlserver:(4)tensquare_qa子模塊創(chuàng)建過濾器
tensquare_parent2020tensquare_qasrcmainjavacomtensquareqainterceptorJwtInterceptor.java
package(5)tensquare_qa子模塊創(chuàng)建攔截器
tensquare_parent2020tensquare_qasrcmainjavacomtensquareqaconfigInterceptorConfig.javapackage(6)修改ProblemController的add方法
tensquare_parent2020tensquare_qasrcmainjavacomtensquareqacontrollerProblemController.javapackage(7)啟動服務(wù):先啟動用戶主程序UserApplication,后啟動QaApplication
(8)mysql數(shù)據(jù)庫準(zhǔn)備數(shù)據(jù)
(9)api測試
總結(jié)
以上是生活随笔為你收集整理的BCrypt加密怎么存入数据库_第6天 密码加密与微服务鉴权JWT(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 草鱼多少厘米可以吃?
- 下一篇: postgresql修炼之道_Postg