【ShareBook】1-後臺框架與小程式使用者登入介面實戰
本部落格 貓叔的部落格 ,轉載請申明出處
閱讀本文約 “5分鐘”
適讀人群:Java後端、Java初級、小程式前端
前後端專案的地址
小程式前端
先看一下本節的學習目錄,我們專案的小程式會在首次登入的時候自動獲取使用者的 OpenId
,並作為系統的註冊資訊,這裡只是獲取其OpenId或者SessionId,還 沒有獲取使用者資訊
(比如頭像、Id、性別等)。
而在獲取前,大家可能還要了解一下小程式的 使用者註冊流程
,這裡我就不具體說了。
我們會在app.js(這個是所有小程式 首次都會執行的js
,我們會對小程式的 快取區Storage
進行校驗,並確定是否存在有效token),做校驗,如果沒有就進行 首次註冊
。
註冊流程是從小程式(簡稱vx,以下vx替代)獲取使用者的code,給到伺服器,伺服器會用code還有自己的appId等資訊一起去微信伺服器請求使用者資料,注意每一個vx所對應的使用者 openid都是不一樣
的。
config.js是存放整個vx的 統一基層API地址
。
就如上圖寫的,前端在第一節的內容較為簡單,大家可以在GitHub看到原始碼。
針對適讀人群的合理學習時間是: 45分鐘,並瞭解vx官網部分簡易API
。
Java服務端
本節的服務端是重點,除了搭建整個SpringBoot基本開發框架以外(好像不用很久)還要準備一些基本的 公關類和工具類
,這個大家學習起來可能有點費勁,不過乾貨很多。
首先是技術棧,SpringBoot+MySQL+MyBatis,這個我就不具體說怎麼搭建了,詳情看原始碼,或者我的 官網
也有搭建教程。
在pom檔案中,我引入了Swagger,這會方便我們與前端對接API的資訊,你僅需要在啟動類加上一個 @EnableSwagger2的註解
即可。
訪問: http://localhost:8080/sharebook/swagger-ui.html
(注意我的application-dev.yml中給專案起了名字叫sharebook,如果你是 其他名字
,請修改)
需要介紹的是,大家可以看看resources資料夾我採用application.yml、application-dev.yml,這樣可以方便我們快速切換 開發、生產、測試等多種環境的專案配置
,希望大家可以養成習慣。
在專案的實體類上,我採用Lombok快速生成get/set方法,你僅需要加一個@Data的註解,這裡你需要注意還要加 無參和全參的建構函式
,例如我一開始沒有全參的構造,在讀取生成User實體類的時候,MyBatis會報 java.lang.NoSuchMethodException
。
同時實體類需要序列號,我這裡就採用預設的Serializable,對實體類序列化是因為它可能需要進行 網路通訊或者資料持久化
。對於加了Serializable的實體類,最好有一個對應的UID。
因為我是用IDEA(推薦使用),所有如果要 生成UID
,可以在配置勾選以上的 選項
,然後點選實體類按“Alt+Enter”,然後選擇生成UID即可。
common & util
對於AppMessage,大家可能會吐槽,因為其實可以優化,不過我從ssm遷移過來就偷懶了,大家可以fork後自己改為SpringBoot的yml配置形式,它其實就是一些 靜態配置
。
HttpService寫的不好,大家可以修改優化,是一個普通的 Http請求工具類
。
主要是ResponseCode和ServerCache,對API介面返回層做了 統一處理
,vx前端程式設計師可以更好的 除錯工作
,推薦大家模仿優化。
TokenCache使用了Google的guava做了本地快取, 快取vx登入的token
,一定要設定有效時間。
其實util包和common包一開始拆分的不好,所以大家可以優化。
MD5Util就是一個MD5的加解密處理。
業務處理
就如上面vx環節說的,我們API獲取到code後會進行校驗處理。
我在介面實現使用了很古老的方式,程式碼是很久以前的了,見諒,介紹流程為主。大家可以去修改優化。
我對從微信伺服器獲取到的結果進行校驗和資料獲取,得到的 openid先到資料庫校驗,使用者是否存在,存在就生成Token,不存在就註冊後生成Token
。流程很簡單。
補充以下,vx的API路徑我推薦: http://localhost :8080/sharebook/api/v1/
這裡採用v1命名。是因為後續升級後v2,這樣有時可以 保證老版本API可以繼續使用或者停用
。
針對適讀人群的合理學習時間是: 115分鐘,推薦自己模仿敲一遍
。
實戰除錯
vx首次登入呼叫成功。
vx快取區Storage儲存token資料
後端伺服器日誌列印正常。
SQL資料錄入正常,這裡sessionId為null是正常的,專案業務沒有要求儲存sessionId,注意對於在統一公眾號下的不同小程式的openid是不同的,但是sessionId是一致的(不知道近期vx官方是否更改規則)。
目錄連結
公眾號:Java貓說
學習交流群:728698035
現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程式人生與不定期乾貨。