項目介紹
準備工作
創建數據表
創建項目
添加依賴
創建對應目錄
除了基本的數據層mapper,業務層service,交互層controller,還創建了公共類的層common,枚舉類層enums,異常類層,和實體類層pojo。
配置項目配置文件
準備前端頁面
將前端頁面復制到static目錄下
測試
項目公共模塊?
統一返回格式



@AllArgsConstructor?這個注解來形成包括所有成員變量的構造函數,定義了兩個枚舉常量。
pojo是所有實體類的合集,差不多是這意思,現在的實體類分的很細,和數據庫交互的實體類,接收的實體類,返回的實體類,有了更細的分層。
定義了三個成員變量,第一個就是定義的枚舉類,表示了這個返回數據的狀態,errMsg是業務錯誤時的是什么錯誤原因,data是返回數據正確時填充的交給前端的數據。并且實現了兩個返回該類型的方法,一個是錯誤方法返回一個狀態碼為錯誤的result對象,一個是成功方法返回一個狀態碼為正確的result對象。這會在統一返回格式用到。
統一返回結果
在公共類創建統一返回結果的處理類。
對所有的返回結果進行了處理,如果返回格式不是result類,就進行包裝成result類返回,是result類就直接返回,string類需要另外的處理。?
統一異常處理
創建異常類
只要繼承了異常類,那么這個類就可以視為自定義的一個異常類,里面的成員變量和方法都是看需求自定義的。
統一異常處理類
目前只創建了針對兩個異常的處理,都是先寫入日志,然后再將異常里填充的錯誤信息交給Result類當中的錯誤方法來返回一個業務狀態碼為錯誤的result對象。
業務代碼
持久層
先創建兩個基于不同實體類和數據庫交互的類
先暫時的使用mybatis-plus所提供的方法,如果需要其他的方法那就另外實現。
實現博客列表
首先在controller層實現前端接口
實現業務層代碼
在業務層為了更好的解耦,需要先定義接口,再通過impl實現類來實現接口的方法。
規范當中,只給前端需要的數據,而直接從數據庫取出的數據,多了一些不需要的屬性,那么就需要另外定義一個類來返回給前端。
將更新時間和是否刪除這兩個字段刪除了。
實現博客詳情
controller層
?service層
實體類的Date日期屬性中,想要指定格式可以通過這個注解。
?
當為null時,會報異常,那么就可以在異常統一處理將這個異常進行處理。
實現登錄
?
所以要使用令牌技術。
令牌技術
令牌的校驗并不是由服務端進行校驗的,而是通過提供的令牌校驗接口來校驗,所以不管是哪個服務器,都有校驗令牌是否有效的能力。
JWT令牌
令牌本質就是—個字符串, 他的實現?式有很多, 我們采?—個JWT令牌來實現.
介紹
JWT全稱: JSON Web Token
官?: https://jwt.io/
JSON Web Token(JWT)是—個開放的?業標準(RFC 7519), ?于客?端和服務器之間傳遞安全可靠的信息.
其本質是—個token, 是—種緊湊的URL安全?法.
JWT組成
JWT令牌生成和校驗
引入依賴
生成令牌
這一串就是生成key依賴的字符串密鑰。
校驗令牌
?
?
?
創建請求和響應的實體類
傳遞的參數為對象的時候,參數校驗可以使用這兩個注解在類里面對成員變量進行注解校驗,message是不滿足條件時報異常的字符串,length是檢驗屬性長度的,max是最長,min是最短。
實現controller
這次交互使用body進行交互,body的默認格式就是json,接收body參數需要用requestbody注解,而想要之前在實體類的注解起效,需要在對象旁邊加一個validated注解。
實現service
先構造出wrapper條件,再使用mybatis-plus實現的持久層方法來查詢用戶,再對密碼進行校驗,最后將業務需要的字段填充進令牌token里,這是看業務需求來選擇填充哪些的。?
接口測試
成功。
實現強制要求登錄
當?戶訪問 博客列表頁 和 博客詳情頁 時, 如果?戶當前尚未登陸, 就?動跳轉到登陸頁?. 我們可以采?攔截器來完成, token通常由前端放在header中, 我們從header中獲取token, 并校驗 token是否合法。
先創建一個攔截器,和前端約定好,將token從header上傳遞,然后對這個token進行檢驗,如果沒有token或者token不正確都會拋異常,經過檢驗后沒有問題就允許訪問。
定義攔截路徑
?
將除了登錄頁面以外的所有頁面都攔截。
測試
不攜帶token
攜帶正確token
?
實現顯示用戶信息
實現用戶退出
實現發布博客
實現刪除/編輯博客
?
編輯和刪除是只有帖子博主才能操作,所以需要前端來判斷是否要顯示這兩個接口。
加密/加鹽
一般還需要重新得到的密碼就用對稱和非對稱加密算法,如果不需要再用到,只需要進行核驗的話一般用到摘要算法。
?
?
?
加密算法可以任意選擇,重要的是概念,會通過算法來形成一個鹽,這個鹽會和密碼一起以某種方式組合在一起然后加密形成密文,數據庫中保存的是密文和鹽,當注冊好后,再次登錄,那么拿的就是明文再加上數據庫中保存的鹽來形成密文,和數據庫中的密文進行校驗,相等就視為密碼正確。