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数据库与迁移
Section titled “数据库与迁移”- 数据库为 SQLite 文件,默认
./data/app.db。 - 使用 Flyway 管理结构:
V1__init.sql建表与基础种子,V2__menu_and_app_state.sql创建菜单和运行状态表。 - JPA 设为
ddl-auto: none,结构完全由迁移脚本控制。 - 启动后
PermissionSyncRunner先同步权限,MenuSyncRunner再补齐内置菜单,不覆盖管理员调整的顺序。
认证:Sa-Token
Section titled “认证:Sa-Token”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 backendmvn spring-boot:run后端监听 http://localhost:8088。与 Python 版不同,Java 版不提供内置 Swagger 文档,接口定义以 controller/ 下的代码为准。
构建脚本使用 Spotless 校验格式:
cd backend && mvn spotless:check