前言
也许你想从前端到后台、从部署到上线都自己操作一遍;也许你只是想做个后台项目不关心前端;项目不止代码,还会有前端环境搭建、跨域处理、Https证书、Nginx部署、IPFS等知识,不管怎样,这个项目都适合你
项目地址:https://github.com/Dengqlbq/BitPic
作为一个定位适合大部分人(高手除外)的Java Web项目,本文尽量以简洁易懂的方式对其解析,无论是前后都想搞懂还是只关心后端代码,这里都会给你答案。
项目架构
总体架构:
- 前后端以
Nginx
作为通信代理,通过预先设计好的RESTful
接口以Json
格式进行通信。 - 前端接收用户输入并封装成请求发往
Nginx
,将Nginx
响应封装成视图返回给用户 - 后端处理
Nginx
发过来的业务请求并和数据库和文件系统交互,将结果封装成响应返回 Nginx
将前端的业务请求发往后端并将后端响应返回,遇到资源请求(如略缩图)则直接从文件系统读取后返回- 前后端使用
HTTPS
通信,并采用基于Token
的身份认证机制
项目层次
- 控制器层、服务层、数据持久层及公共层为一般分层模式中常见层次
- 切面层进行身份认证、信息访问权限及文件下载权限认证
- 拦截器层用于解决跨域问题
模块与功能划分
后端模块
后端共划分为四大模块,每个模块下再划分具体功能:
- 权限验证模块(切面层)
- 通用作品信息模块
- 用户模块
- 管理员模块
管理员模块处理所有的审核事务,这里将短信验证码划归管理员模块但目前调用该接口不需要管理员权限
用户模块功能繁多,包括普通用户和摄影师的功能
前端模块
前端分为两个部分独立运行,均采用组件化开发
- 网站前台
- 管理后台
存储
信息存储
信息主要为以下三种:
- 用户个人信息(账号密码等)
- 用户相关信息(订单等)及作品信息
- Token
个人信息改动较少,存储在Mysql
中。订单信息以及作品信息等量大且经常被查询,存储在ElasticSearch
中。Token
在每一个请求中都会被使用以进行各种认证,存储在Redis
中
文件存储
系统中涉及众多类型的用户上传文件和系统生成的文件,文件的存储需要遵循一定规则才能使系统保持高效稳健的运行。
在设计文件存储规则时主要考虑以下几点:
- 文件的类型有用户身份认证文件、作品文件、作品相关授权文件、作品略缩图、头像文件、作品打包文件、订单下载打包文件和购买凭证文件
- 打包文件皆为
zip
格式,购买凭证文件为txt
格式,其余文件为图片 - 某些文件可被系统外部直接访问如作品略缩图,而某些文件不能
- 对于可被系统外部直接访问的文件,系统在返回文件地址时应考虑节省网络流量
- 相关联的文件应相邻存储;不同用途的文件不能混杂存储
基于以上考虑,系统开辟两个文件存储