【ShareBook】1-後臺框架與小程序用戶登錄接口實戰

本博客 貓叔的博客,轉載請申明出處
閱讀本文約 “5分鐘”
適讀人羣:Java後端、Java初級、小程序前端

前後端項目的地址

小程序前端

Image

先看一下本節的學習目錄,我們項目的小程序會在首次登錄的時候自動獲取用戶的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服務端

Image

本節的服務端是重點,除了搭建整個SpringBoot基本開發框架以外(好像不用很久)還要準備一些基本的公關類和工具類,這個大家學習起來可能有點費勁,不過乾貨很多。

首先是技術棧,SpringBoot+MySQL+MyBatis,這個我就不具體說怎麼搭建了,詳情看源碼,或者我的官網也有搭建教程。

在pom文件中,我引入了Swagger,這會方便我們與前端對接API的信息,你僅需要在啓動類加上一個@EnableSwagger2的註解即可。

訪問:http://localhost:8080/sharebook/swagger-ui.html(注意我的application-dev.yml中給項目起了名字叫sharebook,如果你是其他名字,請修改)

Image

需要介紹的是,大家可以看看resources文件夾我採用application.yml、application-dev.yml,這樣可以方便我們快速切換開發、生產、測試等多種環境的項目配置,希望大家可以養成習慣。

在項目的實體類上,我採用Lombok快速生成get/set方法,你僅需要加一個@Data的註解,這裏你需要注意還要加無參和全參的構造函數,例如我一開始沒有全參的構造,在讀取生成User實體類的時候,MyBatis會報java.lang.NoSuchMethodException

同時實體類需要序列號,我這裏就採用默認的Serializable,對實體類序列化是因爲它可能需要進行網絡通信或者數據持久化。對於加了Serializable的實體類,最好有一個對應的UID。

Image

因爲我是用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後會進行校驗處理。

Image

我在接口實現使用了很古老的方式,代碼是很久以前的了,見諒,介紹流程爲主。大家可以去修改優化。

我對從微信服務器獲取到的結果進行校驗和數據獲取,得到的openid先到數據庫校驗,用戶是否存在,存在就生成Token,不存在就註冊後生成Token。流程很簡單。

補充以下,vx的API路徑我推薦:http://localhost:8080/sharebook/api/v1/

這裏採用v1命名。是因爲後續升級後v2,這樣有時可以保證老版本API可以繼續使用或者停用

針對適讀人羣的合理學習時間是:115分鐘,推薦自己模仿敲一遍

實戰調試

vx首次登錄調用成功。

Image

vx緩存區Storage存儲token數據

Image

後端服務器日誌打印正常。

Image

SQL數據錄入正常,這裏sessionId爲null是正常的,項目業務沒有要求存儲sessionId,注意對於在統一公衆號下的不同小程序的openid是不同的,但是sessionId是一致的(不知道近期vx官方是否更改規則)。

Image

目錄鏈接

公衆號:Java貓說

學習交流羣:728698035

現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不定期乾貨。

Image Text

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章