feat: 重构为前后端分离架构并完善设备端演示
- 新增 Web 用户端(登录体系 + 统一 REST API 调用) - 后端增加用户认证、统一 ApiResponse、CORS 支持 - Android 设备端迁移至 MVVM + DataBinding + Retrofit 网络层 - 完善 README 架构说明与密码学原理文档 - 新增 .gitignore 与持久化数据表说明
This commit is contained in:
74
springboot-server/sql/schema.sql
Normal file
74
springboot-server/sql/schema.sql
Normal file
@@ -0,0 +1,74 @@
|
||||
-- ============================================================
|
||||
-- 安全设备 Demo - 数据库初始化脚本
|
||||
-- 库名: secure_device (与 application.properties 中配置一致)
|
||||
-- 说明: 存储照片元数据、设备、用户、用户照片索引
|
||||
-- 密文本身落盘于 uploads/ 目录
|
||||
-- 服务端永远不存明文照片和明文 DEK
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 创建数据库(如已存在可跳过)
|
||||
CREATE DATABASE IF NOT EXISTS `secure_device`
|
||||
DEFAULT CHARACTER SET utf8mb4
|
||||
DEFAULT COLLATE utf8mb4_general_ci;
|
||||
|
||||
USE `secure_device`;
|
||||
|
||||
-- 2. 加密照片表(对应 EncryptedPhoto 实体)
|
||||
CREATE TABLE IF NOT EXISTS `encrypted_photo` (
|
||||
`photo_id` VARCHAR(64) NOT NULL COMMENT '照片唯一 ID (PK)',
|
||||
`device_id` VARCHAR(64) DEFAULT NULL COMMENT '来源设备 ID',
|
||||
`user_id` VARCHAR(64) DEFAULT NULL COMMENT '所属用户 ID',
|
||||
`file_path` VARCHAR(512) DEFAULT NULL COMMENT '密文文件落盘路径',
|
||||
`iv_base64` VARCHAR(256) DEFAULT NULL COMMENT 'GCM IV (Base64)',
|
||||
`encrypted_dek_base64` VARCHAR(1024) DEFAULT NULL COMMENT 'DEK 被 UK 加密后的密文 (Base64)',
|
||||
`metadata_signature` VARCHAR(1024) DEFAULT NULL COMMENT '设备私钥签名 (Base64)',
|
||||
`upload_time` BIGINT DEFAULT NULL COMMENT '上传时间戳 (ms)',
|
||||
PRIMARY KEY (`photo_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_device_id` (`device_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='加密照片元数据表';
|
||||
|
||||
-- 3. 设备表(对应 Device 实体)
|
||||
CREATE TABLE IF NOT EXISTS `device` (
|
||||
`device_id` VARCHAR(64) NOT NULL COMMENT '设备唯一 ID (UUID, PK)',
|
||||
`sn` VARCHAR(64) NOT NULL COMMENT '设备序列号 (唯一)',
|
||||
`user_id` VARCHAR(64) DEFAULT NULL COMMENT '绑定的用户 ID',
|
||||
`public_key_base64` TEXT DEFAULT NULL COMMENT '设备 TEE 公钥 (Base64)',
|
||||
`bind_time` BIGINT DEFAULT NULL COMMENT '绑定时间戳 (ms)',
|
||||
`last_recovery_time` BIGINT DEFAULT NULL COMMENT '最近一次恢复时间戳 (ms)',
|
||||
`active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否激活 (1 激活 / 0 停用)',
|
||||
PRIMARY KEY (`device_id`),
|
||||
KEY `idx_device_sn` (`sn`),
|
||||
KEY `idx_device_user` (`user_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备注册与绑定状态表(一个 SN 可有多条历史记录,仅一条 active)';
|
||||
|
||||
-- 4. 用户表(对应 User 实体)
|
||||
CREATE TABLE IF NOT EXISTS `app_user` (
|
||||
`user_id` VARCHAR(64) NOT NULL COMMENT '用户 ID (PK)',
|
||||
`phone` VARCHAR(32) DEFAULT NULL COMMENT '手机号(用于短信验证)',
|
||||
`uk_encrypted_base64` TEXT DEFAULT NULL COMMENT '用户主密钥 UK (Base64)',
|
||||
`password` VARCHAR(128) DEFAULT NULL COMMENT '登录密码 (Demo 明文,生产用 BCrypt)',
|
||||
`phone_verified` VARCHAR(8) DEFAULT NULL COMMENT '手机号是否已验证',
|
||||
PRIMARY KEY (`user_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户与主密钥表';
|
||||
|
||||
-- 5. 用户-照片关联表(对应 UserPhoto 实体)
|
||||
CREATE TABLE IF NOT EXISTS `user_photo` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增主键',
|
||||
`user_id` VARCHAR(64) NOT NULL COMMENT '用户 ID',
|
||||
`photo_id` VARCHAR(64) NOT NULL COMMENT '照片 ID',
|
||||
`created_time` BIGINT DEFAULT NULL COMMENT '创建时间戳 (ms)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_photo_user` (`user_id`),
|
||||
KEY `idx_user_photo_photo` (`photo_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户照片索引表';
|
||||
|
||||
-- ============================================================
|
||||
-- 已有数据库迁移(仅当旧库的 device 表带 SN 唯一索引时手动执行)
|
||||
-- 说明:早期版本 device.sn 建为 UNIQUE 索引,导致「恢复出厂重新注册」时
|
||||
-- 报 Duplicate entry。现将 SN 改为普通索引(一个 SN 可有多条历史设备记录,
|
||||
-- 仅一条 active)。spring.jpa.hibernate.ddl-auto=update 不会自动删除已存在
|
||||
-- 的唯一索引,故需手动执行下面两句:
|
||||
-- ============================================================
|
||||
-- ALTER TABLE `device` DROP INDEX `idx_device_sn`;
|
||||
-- ALTER TABLE `device` ADD INDEX `idx_device_sn` (`sn`);
|
||||
Reference in New Issue
Block a user