共计 2127 个字符,预计需要花费 6 分钟才能阅读完成。
本博客 猫叔的博客,转载请申明出处
阅读本文约“5 分钟”
适读人群:Java 后端、Java 初级、小程序前端
前后端项目的地址
- ShareBookServer
- ShareBookClient
小程序前端
先看一下本节的学习目录,我们项目的小程序会在首次登录的时候自动获取用户的 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
现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不定期干货。