Skip to content

SpringBoot 2.7 + Vue3 前后端分离的快速开发框架

项目简介

本项目为一款持续更新、完全免费开源的企业级应用开发框架,采用前后端分离架构,专注于提升业务开发中的非功能性需求支持。前端基于 Vue 和 Element UI 构建,后端采用 Spring Boot、Spring Security、Redis 和 JWT 等技术栈,集成了完善的权限认证机制,支持多终端登录与身份验证。

系统面向互联网场景设计,兼顾 B 端与 C 端用户需求,具备高度可扩展性与适配性。通过插件化方式集成企业开发中常用的中间件与组件,模块设计遵循高内聚、低耦合原则,结构清晰、易于扩展。代码规范整洁,架构简洁明确,既适合学习参考,也可用于企业实际项目开发。

内置模块

  1. 用户管理:管理系统操作人员,完成用户账号的创建、权限分配和信息维护。

  2. 部门管理:配置公司、部门的多级组织架构,以树形结构直观展示,并支持按数据权限进行隔离。

  3. 菜单管理:配置系统导航菜单、操作功能权限及按钮级权限标识,实现精细化访问控制。

  4. 角色管理:为不同角色分配菜单和操作权限,支持按组织架构划分数据权限范围。

  5. 字典管理:维护系统中常用且相对固定的分类、标签等基础数据,提升数据一致性和可维护性。

  6. 参数管理:对系统运行所需的动态参数进行集中配置与管理,支持实时调整和生效。

  7. 通知公告:发布并维护系统内的通知和公告信息,确保用户及时获取重要动态。

  8. 操作日志:记录和查询系统的正常操作日志与异常信息日志,便于审计与故障排查。

  9. 登录日志:查询用户登录记录,包括成功与异常的登录行为,保障系统安全可控。

  10. 在线用户:实时监控系统中当前活跃用户的登录状态和操作行为。

开发说明

运行环境

工具版本
Java1.8、17
Maven3.6.3 +
Redis5 +
PostgreSQL12.16
IDEIDEA、Eclipse 、VS Code

工程结构

├── java
│   └── net
│       └── vjsp
│           ├── common				-- 	通用文件
│           │   ├── constant			--	全局常量
│           │   ├── enums				--	全局枚举 
│           │   ├── exception			--	全局异常
│           │   ├── model				--	通用封装对象实体
│           │   └── util				-- 	静态工具类
│           ├── framework			--	系统框架
│           │   ├── aspectj				--	业务注解
│           │   │   ├── annotation		--  注解实现
│           │   ├── config				--	配置类
│           │   ├── filter				--	过滤器
│           │   ├── handler				--	配置文件中引用的执行器
│           │   ├── model				--	框架对象实体
│           │   ├── security			--	权限框架组件和实现
│           │   └── service				--	全局动态工具类和通用方法
│           ├── modules				--	业务模块
│           │   ├── controller			--	控制层
│           │   ├── domain				--	实体类
│           │   │   ├── convert			--	转换类,用于跨层交互传递
│           │   │   ├── dto				--	三方调用数据封装
│           │   │   ├── form			--	提交表单对象
│           │   │   ├── po				--	持久层对象
│           │   │   ├── query			--	查询对象
│           │   │   └── vo				--	查询列表实体
│           │   ├── mapper				--	持久化实现
│           │   └── service				--	业务逻辑实现
│           ├── system				--	系统模块
│           │   ├── common				--	通用控制层:登录、上传、下载、验证码
│           │   ├── controller			--	控制层
│           │   ├── domain				--	实体类
│           │   │   ├── convert			--	转换类,用于跨层交互传递
│           │   │   ├── dto				--	三方调用数据封装
│           │   │   ├── form			--	提交表单对象
│           │   │   ├── po				--	持久层对象
│           │   │   ├── query			--	查询对象
│           │   │   └── vo				--	查询列表实体
│           │   ├── mapper				--	持久化实现
│           │   └── service				--	业务逻辑实现
│           ├── workflow			--	工作流		
│           └── VjspApplication.java	--	系统启动类	
└── resources							--	配置文件

结构规范

一级包名路径说明
common通用文件包,全局变量,异常类,枚举类,静态工具类等和业务无关的全局文件
framework系统文件包,权限框架,配置文件,拦截器,依赖注入工具类
system系统模块,用户,角色,菜单,日志,登录等
modules业务模块,除系统自带模块外其他功能模块
workflow工作流模块
resources配置文件

Maven规范

使用springboot主版本提供依赖的jar包,不需要写版本号,非springboot主版本提供依赖得jar包, 版本号声明提取到属性文件中

当前系统中使用到得非springboot主版本提供依赖得jar包如下:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <skipTests>true</skipTests>
    <java.version>1.8</java.version>
    <mapstruct.version>1.5.1.Final</mapstruct.version>
    <springdoc.version>1.7.0</springdoc.version>
    <postgresql.version>42.2.20</postgresql.version>
    <mybatis-plus-boot-starter.version>3.5.1</mybatis-plus-boot-starter.version>
    <commons.io.version>2.19.0</commons.io.version>
    <jasypt.version>3.0.5</jasypt.version>
    <bcprov.version>1.73</bcprov.version>
    <poi.version>4.1.2</poi.version>
    <jjwt.version>0.9.0</jjwt.version>
    <fastjson.version>2.0.58</fastjson.version>
    <fastdfs.version>1.27.2</fastdfs.version>
    <s3.version>1.11.792</s3.version>
</properties>

spring-boot-starter-parent版本号为:2.7.0,不建议更换其他版本,存在配置兼容性问题。

JAR包清单

名称版本用途
spring-boot2.7.0框架主版本
spring-boot-starter-web同主框架版本Web容器
spring-boot-starter-test同主框架版本测试
spring-boot-configuration-processor同主框架版本元数据补全
spring-boot-starter-aop同主框架版本拦截器
spring-boot-devtools同主框架版本热编译工具
spring-boot-starter-security同主框架版本安全认证
spring-boot-starter-data-redis同主框架版本数据缓存
spring-boot-starter-validation同主框架版本校验框架
lombok1.18.24开发工具库
mybatis-plus-boot-starter3.5.1持久层框架
mybatis-plus-extension3.5.1持久层框架
mybatis-plus3.5.1持久层框架
postgresql42.3.5数据库驱动
springdoc-openapi-ui1.7.0文档工具
springdoc-openapi-security1.7.0文档工具
jasypt-spring-boot-starter3.0.5配置加密工具
bcprov-jdk15to181.73加密库
fastjson22.0.58json解析器
mapstruct1.5.1.Final代码生成工具
mapstruct-processor1.5.1.Final代码生成工具
poi-ooxml4.1.2excel工具
commons-io2.19.0常用工具类
commons-lang33.12.0常用工具类
jjwt0.9.0JWT支持
fastdfs-client1.27.2文件存储
aws-java-sdk-s31.11.792文件存储

命名规范

所有对象类名使用大驼峰命名法(PascalCase),不允许使用下划线、小驼峰、缩写等非标准命名。

对象使用场景命名规范
Form接收前端 POST/PUT 请求的 JSON 数据,配合 @Validated 校验已Form结尾
DTO用于服务间调用、复杂逻辑封装或跨层数据传输已DTO为后缀
PO持久层对象,由 MyBatis 映射已PO为后缀
Query封装分页查询条件,必须继承 BaseQuery已Query为后缀
VO返回给前端的数据视图对象已VO为后缀
Convert负责 PO ↔ DTO ↔ VO 之间的转换 (MapStruct实现)已Convert为后缀
Mapper持久层,定义数据库操作方法已Mapper为后缀
Service业务逻辑接口已Service为后缀
ServiceImpl业务逻辑实现类,调用 Mapper 并处理事务已ServiceImpl为后缀
Controller提供 RESTful API 接口,调用 Service,返回 CommonResult<?>已Controller为后缀
Filter过滤器对象已Filter为后缀
Config系统配置类对象已Config为后缀
Aspect逻辑切面实现对象已Aspect为后缀
Properties属性配置文件已Properties为后缀
Constants常量对象已Constants为后缀
Enum枚举对象已Enum为后缀

接口规范

设计 RESTful API 时需要遵循的主要规范

  • GET /users/123 -> 获取 ID 为 123 的用户信息。
  • POST /users -> 创建一个新用户。
  • PUT /users/123 -> 完整更新 ID 为 123 的用户信息。
  • DELETE /users/123 -> 删除 ID 为 123 的用户。

API命名规范

资源命名规则:资源应该是名词,不允许动词。

方法命名规则:

  • POST save -> 新增方法
  • DELETE remove -> 删除方法
  • DELETE batchRemove -> 批量删除方法
  • UPDATE edit -> 修改方法
  • GET get -> 查询详情
  • GET page -> 分页查询
  • GET listAll -> 查询全部(不分页)
  • GET export -> 导出方法

请求头格式

身份验证使用JWT实现,已查询用户为例,传递格式:

POST http://127.0.0.1/system/users/listAll
Content-Type: application/json
Authorization: Bearer <jwt_token>

{
  "loginName": "zhangsan"
}

代码规范【未完】

控制层

  1. 映射规则 全局,每个方法
  2. 审计日志
  3. 表单校验
  4. 返回对象格式
  5. 权限控制
  6. 文档注解
  7. 方法定义
  8. 异常处理
  9. 访问限流
  10. 错误码
  11. 数据脱敏

业务层

  1. 继承关系
  2. IService方法清单
  3. 全局通用service添加
  4. 业务service添加
  5. 事务控制
  6. 分页
  7. 异常处理
  8. 缓存注解

持久层

  1. 继承关系
  2. BaseMapper方法清单
  3. 全局通用Mapper添加
  4. 业务Mapper添加
  5. Mappper中使用自定义SQL
  6. 在XML中使用自定义SQL
  7. 幂等新增和保存

权限规范【未完】

  1. 三种使用场景
    1. 登录并需要授权
    2. 登录不需要授权
    3. 不需要登录(链接:白名单的使用说明)
  2. 注解格式
  3. 资源标识的维护和表对应关系
  4. 权限拦截方法的注入
  5. 权限拦截的函数

开发规范

  1. 隶属于用户个人的页面或者功能必须进行权限控制校验
  2. 用户敏感数据禁止直接展示,必须对展示数据进行脱敏
  3. 用户请求传入的任何参数必须做有效性验证和长度校验
  4. 配置文件中的密码需要加密
  5. 上传文件定义大小限制和头部特征码检测

数据库规范

建表规范

  1. 表名、字段名必须使用小写字母或数字,禁止出现数字开头

  2. 表名不允许使用复数名词

  3. 业务表必须包含默认字段

    业务表默认字段,实体继承SuperEntity,由框架完成数据填充

    非业务表,如用户角色绑定表,不需要单独记录操作人、时间等信息的表,实体继承SuperBaseEntity

    字段名称数据类型是否必填默认值描述
    idint8主键
    create_user_idint8now()创建人ID
    create_timetimestamp(6)创建时间
    update_user_idint8修改人ID
    update_timetimestamp(6)修改时间
    del_flagint20删除标志(0正常 1删除)
  4. 在数据库中不能使用物理删除操作,要使用逻辑删除。

  5. 表单是与否的字段不允许使用is_xxx 的方式命名,数据类型:int2(1 表示 是,0 表示否)

  6. 业务唯一字段必须创建索引

常用字段类型

以下为常用字段的类型设置

字段名称数据类型Java类型描述
idint8(64)Long主键,保存雪花ID
login_namevarchar(100)String登录账号,字符串
sexint2(16)Integer用户性别(0男 1女 )
sort_byint4(32)Integer排序
brithdaydatejava.util.Date日期类型
create_timetimestampjava.util.Date时间类型
account_balancenumeric(15,2)BigDecimal货币余额
detailstextString大文本,访问日志

系统配置类

数据脱敏配置(SensitiveJsonSerializer.java)

  1. 使用场景
  2. 注解说明
  3. 代码实例

过滤器配置(FilterConfig.java)

  1. 注册 XSS 过滤器

    ## 防止XSS攻击
    xss:
       # 过滤开关
       enabled: true
       # 排除链接(多个用逗号分隔)
       excludes: /wechat/callback
       # 匹配链接
       urlPatterns: /*
  2. 注册 Referer 过滤器

    ## 防盗链配置
    referer:
       # 防盗链开关
       enabled: false
       # 允许的域名列表
       allowed-domains: localhost,127.0.0.1

跨域配置(GlobalCorsConfig.java)

  1. 使用场景
  2. 配置指定域名的跨域

序列化配置(JacksonConfig.java)

  1. 使用场景 时间字符串
  2. 主键精度丢失处理

MybatisPlus的自动填充配置(MybatisPlusAutoConfigure.java)

  1. 自动填充属性说明
  2. 增加填充字段
  3. 执行填充的逻辑

MybatisPlus配置(MyBatisPlusConfig.java)

  1. 设置扫描路径
  2. 插件注册

Redis配置(RedisConfig.java)

  1. 设置RedisTemplate序列化方式

    使用String序列化key,使用JSON序列化value。具体使用方式见。。。Redis工具类

  2. 设置限流脚本

    这是一个基于时间窗算法的脚本,具体使用方式见。。。访问限流

    local key = KEYS[1] -- 限流的资源KEY
    local now = tonumber(ARGV[1]) -- 当前时间戳(通常由客户端传入,如 `unixtime * 1000`)
    local ttl = tonumber(ARGV[2]) -- 一个时间窗口的毫秒数,用于设置Key的过期时间
    local expired = tonumber(ARGV[3]) -- 过期时间点的时间戳(now - 时间窗口大小)
    local max = tonumber(ARGV[4]) -- 时间窗口内的最大限额
    
    -- 1. 清除所有过期的数据(得分在 0 到 expired 之间的成员)
    redis.call('zremrangebyscore', key, 0, expired)
    
    -- 2. 获取当前窗口中剩余的元素数量(即最近一个时间窗口内的请求数)
    local current = tonumber(redis.call('zcard', key))
    local next = current + 1
    
    -- 3. 判断是否超限
    if next > max then
      return 0; -- 0 表示被限流
    else
      -- 4. 没有超限,则将当前请求的时间戳作为成员和得分添加到zset中
      redis.call("zadd", key, now, now)
      -- 5. 刷新整个zset的过期时间
      redis.call("pexpire", key, ttl)
      return next -- 返回当前计数
    end
  3. 设置注解缓存时间

    设置使用注解的TTL时间,具体使用方式见。。。缓存注解

    ## redis缓存规则
    redis:
      cache:
        configs:
          # 缓存key为:vjsp_dict的时候有效期为3600秒
          - key: vjsp_dict
            second: 3600
          # 缓存vjsp_config为:vjsp_dict的时候有效期为3600秒
          - key: vjsp_config
            second: 3600

SpringDoc配置类(SpringDocConfig.java)

  1. 开启和关闭

  2. 配置参数说明

    ## SpringDoc 配置
    springdoc:
      api-docs:
        path: /api-docs
        enabled: true
      swagger-ui:
        path: /swagger-ui.html
        enabled: true
        # 标签排序方式
        tags-sorter: alpha
        # 操作排序方式
        operations-sorter: alpha
        # 保持认证状态
        persistAuthorization: true
        # 隐藏models
        default-models-expand-depth: -1
      packages-to-scan: net.vjsp
      paths-to-match: /**
    
    
    # SpringDoc自定义配置
    app:
      info:
        title: VJSP API
        description: VJSP管理后台开发框架
        version: 1.0.0
        contact:
          name: VJSP
          email: service@vjsp.cn
          url: https://www.vjsp.net

线程池配置(ThreadPoolConfig.java)

  1. 使用场景
  2. 系统默认线程池的名称和参数
  3. 调用代码示例

安全配置(VjspSecurityConfig.java)

  1. 注入内容

依赖注入工具类

Redis操作类

  1. 使用场景
  2. 方法清单+代码示例

密码工具类

  1. 注入位置,有哪些加密方式
  2. 方法清单+代码示例

静态方法工具类

对象转换工具(Convert.java)

脱敏工具(DesensitizedUtils.java)

字典工具(DictUtils.java)

HTML转义工具(EscapeUtils.java)

XSS过滤工具(HtmlUtils.java)

Http请求工具(HttpHelper.java)

字符串工具(StringUtils.java)

日期工具(DateUtils.java)

文件工具(FileUtils.java)

IP工具(IpUtils.java)

Json工具(JsonUtils.java)

JWT工具(JwtUtils.java)

认证工具(SecurityUtil.java)

Base64工具(Base64.java)

密钥工具(KeyGeneratorUtils.java)

MD5工具(Md5Utils.java)

RSA工具(RsaUtils.java)

SM4工具(SM4Utils.java)

反射工具(ReflectUtils.java)

Excel工具(ExcelUtils.java)

Spring工具(SpringUtils.java)

Servlet工具(ServletUtils.java)

User-Agent工具(UserAgentUtils.java)

演示图