最近换了一家公司,项目要求必须用人人快速开发平台写代码,这个平台是可以前后端分离的,刚开始不懂,整个过程痛苦的感觉头发稀少了一大半,后来不停的在网上找关于这方面的资料,下来我就把我最近找的资料分享一下;
这块有一个官方能给的具体一点的开发文档:https://www.renren.io/guide/#func
1、配置
1) 从pom.xml 开始 parent 依赖包(包括springboot的所有依赖及Spring-Mybatis 的整合包,常用工具包);
2)Java环境依赖 Java-version
3) 数据库驱动包 MySQL包;
4) 任务调度依赖 quartz
5) 系统权限框架依赖 shiro 框架集成
6) 配置文件
(1)xml 文件
MySQL 数据库和实体的驼峰映射配置
日志文件输出 Dev(开发环境) test(测试环境) pro(生产环境:俗称正式环境)
(2)yml 文件(SpringBoot 开始引入的一种json格式的配置文件 功能类似于properties)
以生产环境为例(DEV)
首先配置数据库驱动DataSource 分布式数据库设计(这里只使用一个)
整体yml 文件开始
配置内置Tomcat 项目名,端口号,最大连接数等;
激活dev.yml 配置文件;
格式化输出 jackson
指定静态资源路径(只针对静态资源,不针对请求)
配置Mybatis *.xml 文件扫描(可称之为指定路径)
2、项目开发
1)创建数据库 -->MySQL 数据库 指定主键ID
2)modules 文件下创建包名(一般为业务名 如 business )
(1) 包括entity(实体) 对应MySQL 数据库 和 resource 文件夹下 mapper 下的.xml 文件
(2) Service (接口类) 对外暴露接口
(3) implements (接口实现类) 实现接口的方法
(4) dao (dao层接口) 映射mapper 文件 接口实现接口的形式 去实现Service的 接口在实现类中调用
3) 控制器(拿出来另说)
(1) 请求处理、权限管理、业务数据处理
(2) 基于注解形式
@Autowired 注入Service
@RestController 指定为控制器
@RequestMapping 或 @PostMapping 或 @GetMapping 指定数据接口路径
@RequiresPermissions 指定 shiro 权限 根据页面配置的 权限标识
(3) 返回实体基于 R (实体) 实现了Map接口 这里的 HashMap也是实现了Map 接口 所以整体是实现了Map 接口
可以扩展 重写 error 方法 或者 OK 方法
(4) 请求参数封装
Query 将所有的param 在接受的时候 全部封装在map 集合中 再整体封装在Query中 (期间计算一些分页所需数据)
(5) 请求过滤 ShiroConfig --> shirFilter 所有的请求都会在这个过滤器中过滤 filterMap 中的请求可以在无token时进行直接请求 无论是post还是get 否则会报401 权限不足的错误
(6) 登录模块
验证码 随机生成 IOUtils.closeQuietly(out); 输出图片
登录的时候验证用户名、密码、和session中的验证码 通过用户名(登录名) 取出 用户密码 再跟用Sha256Hash 加密算法加密的字符串进行比对
(7) token 所有的请求都会验证token(除被ShiroConfig过滤掉的 ) AuthorizationInterceptor.preHandle(验证token 然后转发请求) token 会有一个过期时间 12个小时 判断token是用户请求的一个关键点,token在Header 中 不在请求的请求体中
(8) 重写AuthenticatingFilter 中的方法 isAccessAllowed 这个方法直接废掉 原来是在这里面可以处理直接转发请求 但是引入shiro 后则所有请求都首先经过onAccessDenied,获取请求token,如果token不存在,直接返回401(从header中获取token,如果header中不存在token,则从参数中获取token)
4) 前端界面 前后端完全分离的情况 可以说用另外的一个web项目发布所有的 html 文件 来请求后台也是OK的 HTML 作为静态资源存在于项目中 HTML 代码比jsp的优点在于 纯静态 加载速度快 易于优化
(1) 新闻栏为例
整体构思: bootstrap 样式 + jqgrid (表格) + Vue.js (对象数据) 让你同学去了解一下VUEJS 的基本语法就OK了
页面初始化的时候加载JS文件 然后渲染出JqGrid 所绑定的 ID 对应的 Table (有点绕 你理解一下)
Vue 通过绑定 指定的参数赋值 指定的click 方法 指定的model 赋值或取值 等
至此 项目开发就OK了