FRAMEWORK.md 8.0 KB

项目自定义规范

只是一些建议性的东西,大家有什么好的想法,都可以提出来。

  • 现在暂时定义为v1版本,所有的api以 /v1/模块/功能
  • 采用restFul风格的URL
  • 返回数据的格式,全部采用ResponseDto ,data字段为传递的数据
  • 前后端分离,采用json格式进行数据传输
  • 根据 ResponseDto 的code字段判断请求操作是否成功。如果失败,返回非200的请求码
  • 最好将系统的代码和自己的区分开来,自己的代码写在cn.gygxzc.envir.biz 目录下

  • 一键生成数据库相关代码配置在cn.gygxzc.envir.config.orm 包下,请自行配置相关参数

项目说明

项目采用Spring Cloud分布式解决方案。 目前系统中涉及到的知识点有 :

  • Eureka服务发现与注册中心,
  • Spring Cloud Config Server 微服务配置中心;
  • Spring Cloud Gateway 网关
  • Spring Cloud Bus 消息总线(结合rabbitmq)
  • Spring Session 结合Redis 做分布式权限认证
  • Mybatis-Plus 3.0

需要的可以去了解一下。

项目中缓存可以分成三类:

  • 系统Spring session缓存,shiro缓存

  • 获取当前登录用户信息 SessionUtils 工具类

框架项目升级日志

2018/9/27

升级框架的安全认证方式,改成jwt 和Spring session分布式方式认证。权限由网关统一认证。

2018/9/28

已初步完成Spring session的分布式认证,下一步将移除shiro 依赖即权限认证。

  • 将数据库 DAO类文件卸载 zen-api 下的 cn.gygxzc.envir.biz.dao 路径下
  • 如果需要写 mapper.xml 请写在 resources/mapper 文件夹下,可以在有目录比如;resources/mapper/biz
  • 项目包名统一为 cn.gygxzc.envir.**
  • 项目对mybatis plus进行了升级,使用的是mybatis-plus 3.0,与之前有一定区别,具体可见文档

2018/9/29

1、添加配置中心,将配置中心与即时通信消息系统结合起来
2、 添加Spring bus。服务间的消息通知。
    这一点举一点应用:业务系统需要向前端或者用户发送消息,
    只需要调用发送消息的sender即可。由消息中心把消息发送给前端用户。
3、 删除shiro配置。
    但是因为授权中心使用shiro,导致客户端不能完全移除shiro依赖,但是只引用了shiro的核心包。
    具体原因是:授权中心shiro在生成的session中放入了shiro包中的类实体对象,jdk序列化之后,在各自的业务系统中反序列化,如果不引入shiro核心包,将
    导致jdk反序列化失败,导致各自业务系统无法获取到当前登录的用户信息。
4、 精简大量yml 文件配置,只保留必要的部分。

有了配置中心的存在,可以将所有项目的公有和私有配置放到配置中心,而无需大量放到本地。

5、移除Tomcat依赖,添加jetty依赖

Jetty 更加轻量化,更符合Spring Cloud 分布式部署;当然,这个还需要验证和考量。

2018/9/30

  • 这次项目更新主要是去掉shiro的权限认证,但是保留了shiro的核心包,原因见上昨天更新日志。
  • 删除了很多配置文件,集中到配置中心配置。
  • 保留的配置文件 bootstrap.yml 为配置注册中心,配置中心相关信息,application.yml内只有数据库连接相关配置。 application-cache.yml为项目的一个内存缓存配置。里面需要修改的有备注,但是暂时可以不修改。
  • 完成了mybatis-plus 的物理删除功能,具体见zen-api 下的test 包。

到目前为止,框架这部分基本上不会有太多更新。目前业务中需要的即时通信相关服务,会单独写一个即时通信服务。 业务系统通过rabbitmq 消息总线发送消息到 消息推送系统完成这方面的需求。后期会提供相关的接口包。

2018/10/31

  • 文件上传已完成,请查看 fastdfs-client 查看上传案例写法。

2018/11/1

  • 调整了zen-core 包的目录结构,各位耐心改正一个引入包的路径
  • 给每个客户端添加跨域配置,方便调试

2018/12/20

  • 修复了IFUserService 无法使用,
  • 新增了IFUserService 根据账号信息获取用户信息接口和修改用户的接口
  • 新增了获取文件信息的接口,未测试

2019/1/5

  • 更新User 字段,添加 avatar字段信息
  • 更新两个与安全有关的依赖包

2019/1/8

  • 解决docker 从容器无法限制JVM内存问题
  • 更改基础镜像为openjdk:8-jre-alpine (以前为8-jdk-alpine),减小镜像体积。

2019/2/26 添加加密解密方法

数据从后端返回前端,后端对重要数据进行对称加密,并实现签名,保证数据不会被中途拦截篡改; 数据从前端发送到后端,前端用公钥对数据进行加密,保证数据安全,不会被拦截,并且也需要实现签名,保证数据不被伪造。

  • 在 安全(auth) 依赖包中添加了关于加密解密相关功能。
  • 修改ClientInfo 实体类,添加了非对称加密的密钥信息

2019/3/4 完成前后端加密解密方法bug修复与集成,已可正常使用,添加邮件MQ发送及Feign发送服务

  • 后端使用,添加 SerializedField 注解即可
  • 前端使用,配置中添加 encrypt:true 即可
  • 需要邮件服务去实现相关的发送实现
  • cloud-bus module 的包结构调整比较大,有使用的需要更改一下。

2019/5/12

  • 添加正式上线版本sit 配置信息

后期我的工作计划

  • 将继续精简shiro相关配置,直至完全移除;(已完成)
  • 消息总线 (已完成)
  • 日志记录
  • 即时通信(估计会另外建一个项目来做即时通信)
  • 网关的权限管理。
  • 阿里云对象存储,前后端文件上传功能。

Docker 相关介绍

打包

运行任务 : task dockerBuilder。 特别注意在打包之前需要在idea 的命令行中登陆到镜像中心。 登陆命令为:docker login --username=gxzcalyqy registry.cn-qingdao.aliyuncs.com 密码为:docker20181018

如果一切没有问题,打包成功之后会自动上传到镜像中心。等待上传完成。出现如下提示说明上传完成:

BUILD SUCCESSFUL in 4m 10s
26 actionable tasks: 5 executed, 21 up-to-date
17:40:25: Task execution finished 'dockerBuilder'.

运行命令

docker run -t --name NAME -m568m --expose=PORT -p PORT:PORT -e "EUREKA_INSTANCE_IP-ADDRESS=IP" -e "SERVER_PORT=PORT" IMAGE_NAME

  • IP 宿主机的ip
  • PORT 服务部署的端口号
  • NAME 容器名称,这个自定义
  • IMAGE_NAME 镜像名称或者镜像的ID
  • -m ,限制容器使用内存

注意事项

  • 修改zen-web下的zen-web.gradle 中 task dockerBuilder applicationName为项目自己的内容

以下片段位于zen-web.gradle ,修改其中的applicationName

    task dockerBuilder(type: Docker) {
        registry='registry.cn-qingdao.aliyuncs.com/gxzc-envir'
        applicationName = 'fw'
        tagVersion = jar.version
        addFile("./build/libs/${jar.baseName}-${jar.version}.jar","app.jar")
        entryPoint(["java","-Djava.security.egd=file:/dev/./urandom","-jar",'app.jar'])
        exposePort(11000)
        doFirst {
            copy {
                from jar
                into stageDir
            }
        }
        push = true
    }
  • mysql 时区问题

     -e TZ=Asis/Shanghai   生成容器的时候,指定时区
    set global time_zone = '+8:00'  临时修改,重启后失效
    

数据库mysql8

8.0版本引入了一个新的系统权限 XA_RECOVER_ADMIN ,用于控制执行 XA RECOVER语句的权限。所有尝试执行 XA RECOVER 语句的非授权用户会引起报错。

MySQL 8.0 introduces a new system privilege XA_RECOVER_ADMIN which controls the capability to execute the statement XA RECOVER. An attempt to do XA RECOVER by a user who wasn’t granted the new system privilege XA_RECOVER_ADMIN will cause an error.

其他说明