代码拉取完成,页面将自动刷新
本项目是基于 Spring Boot 3.0 的企业级后台管理系统,采用模块化架构设计,包含通用工具模块、数据模型模块及前后端分离的WEB服务模块。系统集成JWT认证、MyBatis-Plus快速开发、Redis缓存及Knife4j接口文档,适用于中大型企业级应用的后台管理场景。
技术组件 | 版本 | 说明 |
---|---|---|
Spring Boot | 3.0.5 | 核心框架,提供自动配置、依赖管理及快速开发支持 |
MyBatis-Plus | 3.5.3 | 持久层增强工具,简化CRUD操作,支持逻辑删除、自动填充等特性 |
Spring Security | 6.1.0 | 安全框架,结合JWT实现接口权限控制 |
Knife4j | 4.1.0 | Swagger增强工具,提供可视化API文档及测试功能 |
Redis | 6.2 | 内存数据库,用于缓存用户会话、令牌黑名单及高频访问数据 |
Maven | 3.8.6 | 依赖管理工具,父工程统一管理所有子模块依赖版本 |
Flyway | 9.11.0 | 数据库迁移工具,确保环境数据库结构一致性 |
职责:提供全局通用功能,包括工具类、统一响应封装、第三方组件配置等。
common/
├── src/main/java/
│ ├── com.example.common.util/ # 工具类(JwtUtil/RedisUtil/SmsUtil)
│ ├── com.example.common.config/ # 配置类(RedisConfiguration/MyBatisPlusConfig)
│ └── com.example.common.domain/ # 领域模型(Result/ResultCodeEnum)
└── src/main/resources/
├── application-common.yml # 通用配置文件
└── logback-spring.xml # 日志配置文件
职责:定义数据库实体类及MyBatis映射关系。
com.example.model.entity
:数据库实体类(如User
/Role
/Menu
),使用@TableName
/@TableField
注解映射表结构com.example.model.mapper
:继承BaseMapper
的接口类(如UserMapper
),自动生成CRUD方法src/main/resources/mapper
:XML格式自定义SQL(复杂查询场景)职责:提供后台管理端接口(用户管理/角色权限/日志监控)。
包路径 | 功能说明 |
---|---|
com.example.admin.controller |
用户/角色/日志等功能的HTTP接口层 |
com.example.admin.service |
业务逻辑实现层(密码加密/权限分配) |
src/main/resources/mapper/admin |
后台管理相关自定义SQL文件 |
application-admin.yml |
服务端口(8555)、JWT密钥、Redis连接配置 |
职责:提供前端应用调用的业务接口(商品查询/订单提交)。
GoodsController
:商品列表查询(带Redis缓存)、详情接口OrderController
:订单提交(事务控制)、支付回调处理application-api.yml
:接口限流(Sentinel)、短信服务AK/SK配置// MyBatisPlusConfig.java
@Configuration
public class MyBatisPlusConfig {
// 分页插件配置
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
// 自动填充配置(创建时间自动赋值)
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MyMetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
}
};
}
}
UserDetailsService
查询用户信息 → 密码匹配后生成双tokenaccess_token
(15分钟有效期):用于接口访问refresh_token
(7天有效期):用于刷新access_tokenJwtAuthenticationFilter
从请求头提取token → JwtUtil
校验签名和过期时间 → 解析用户信息存入SecurityContext环境组件 | 版本要求 | 说明 |
---|---|---|
JDK | 17+(推荐OpenJDK) | 必须安装17及以上版本 |
MySQL | 8.0+ | 提前创建数据库api_db (utf8mb4) |
Redis | 6.2+ | 默认端口6379(无密码) |
Maven | 3.8+ | 配置阿里云镜像加速下载依赖 |
# 在父工程目录执行,自动执行flyway迁移
mvn flyway:migrate -Dflyway.url=jdbc:mysql://localhost:3306/api_db -Dflyway.user=root -Dflyway.password=123456
# 启动后台管理系统(端口8555)
cd web/admin && mvn spring-boot:run
# 启动前端接口服务(端口8666)
cd ../api && mvn spring-boot:run
http://localhost:8555/doc.html
🌟http://localhost:8666/doc.html
🌟{
"code": 200, // 业务状态码(200成功,400参数错误,401未认证,500服务器错误)
"message": "操作成功", // 提示信息
"data": {
"id": 1,
"username": "admin"
},
"timestamp": 1712345678900 // 响应时间戳
}
错误码 | 说明 | 示例场景 |
---|---|---|
200 | ✅ 成功 | 正常接口调用 |
400 | ⚠️ 参数校验失败 | 手机号格式错误 |
401 | 🔒 token无效/过期 | access_token过期未刷新 |
403 | ❌ 无访问权限 | 普通用户尝试访问管理员接口 |
500 | 🛑 服务器内部错误 | 数据库连接失败 |
生产环境需在application-prod.yml
中补充:
mybatis-plus.configuration.log-impl: null
(关闭SQL日志)spring.redis.password: your_redis_password
(配置Redis密码)jwt.secret: your_32bit_random_string
(设置高强度JWT密钥)MyBatis-Plus.saveBatch
(默认100条/批)@PreAuthorize("hasRole('ADMIN')")
(限制管理员访问)Spring Boot Actuator
,暴露/health
//metrics
监控端点Prometheus+Grafana
监控QPS、数据库连接数等核心指标此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。