跳转到内容

Java 后端

Java 后端使用 Spring Boot 3.2 + Spring Data JPA + SQLite,代码按层组织。

src/main/java/com/hmilyld/fullstack/
├── FullstackApplication.java
├── common/ # ApiResponse、PageResult、全局异常处理
├── config/ # 审计、CORS、Sa-Token、菜单/权限目录、导入冻结与同步任务
├── controller/ # 12 个控制器:auth / user / role / permission / menu / data ...
├── service/ # 业务逻辑
├── repository/ # Spring Data JPA 仓储
├── entity/ # JPA 实体
├── dto/ # 请求 / 响应对象
└── security/ # RateLimiter、StpInterfaceImpl
  • 数据库为 SQLite 文件,默认 ./data/app.db。
  • 使用 Flyway 管理结构:V1__init.sql 建表与基础种子,V2__menu_and_app_state.sql 创建菜单和运行状态表。
  • JPA 设为 ddl-auto: none,结构完全由迁移脚本控制。
  • 启动后 PermissionSyncRunner 先同步权限,MenuSyncRunner 再补齐内置菜单,不覆盖管理员调整的顺序。

Java 版使用 Sa-Token 的服务端会话令牌(UUID 风格),不需要 JWT_SECRET_KEY。

  • 令牌默认有效期 86400 秒(24 小时)。
  • BearerTokenFilter 将 Authorization: Bearer <token> 转换为 Sa-Token 需要的 satoken 头。
  • 登录时在 Sa-Token Session 中记录全局 session_epoch,每次请求都会与数据库状态校验;数据导入成功后所有会话失效。
  • 接口权限通过 @SaCheckPermission(...) 注解声明,支持 SaMode.OR 组合多个权限码。
  • BCrypt 用于密码哈希。

配置文件位于 src/main/resources/application.yml:

配置 默认值 说明
server.port 8088 后端端口
spring.datasource.url jdbc:sqlite:./data/app.db SQLite 文件路径
spring.jpa.hibernate.ddl-auto none 结构由 Flyway 管理
spring.flyway.enabled true 启用迁移
sa-token.token-style uuid 令牌风格
sa-token.timeout 86400 令牌有效期(秒)
app.cors-origins http://localhost:5173 允许的前端来源
app.audit.exclude-paths /api/auth 审计中间件排除路径
app.data.tmp-dir ./data/tmp 导入导出临时目录
app.data.max-import-size-bytes 1073741824 导入包大小上限
spring.servlet.multipart.max-file-size 1GB multipart 上传上限
终端窗口
cd backend
mvn spring-boot:run

后端监听 http://localhost:8088。与 Python 版不同,Java 版不提供内置 Swagger 文档,接口定义以 controller/ 下的代码为准。

构建脚本使用 Spotless 校验格式:

终端窗口
cd backend && mvn spotless:check