1. 智慧校园信息管理平台架构设计
1.1 系统整体架构解析
智慧校园信息管理平台采用前后端分离架构,后端基于Spring Boot框架实现RESTful API服务,前端使用Vue.js构建单页面应用。这种架构设计主要基于以下考虑:
- 解耦优势:前后端开发可以并行进行,后端专注业务逻辑和数据安全,前端专注用户体验和交互设计
- 性能优化:静态资源由CDN分发,API接口按需加载,减轻服务器压力
- 扩展便利:未来可轻松扩展移动端App或小程序,复用同一套API接口
技术栈选择上,我们采用:
- 后端:Spring Boot 2.7 + MyBatis-Plus 3.5
- 数据库:MySQL 8.0(InnoDB引擎)
- 前端:Vue 3 + Element Plus + Axios
- 安全:JWT + Spring Security
- 构建工具:Maven + Webpack
1.2 数据库设计要点
数据库设计遵循第三范式,同时针对高频查询做了适当优化。核心表包括:
sql复制CREATE TABLE `student` (
`id` bigint NOT NULL AUTO_INCREMENT,
`student_no` varchar(20) NOT NULL COMMENT '学号',
`name` varchar(50) NOT NULL,
`college_id` int NOT NULL COMMENT '学院ID',
`major_id` int NOT NULL COMMENT '专业ID',
`class_id` int NOT NULL COMMENT '班级ID',
`id_card` varchar(18) NOT NULL COMMENT '身份证号',
`phone` varchar(11) NOT NULL,
`email` varchar(50) DEFAULT NULL,
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态(1:正常 0:禁用)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_student_no` (`student_no`),
KEY `idx_college_major` (`college_id`,`major_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
关键设计原则:
- 所有表必须包含create_time和update_time字段
- 字符串字段使用utf8mb4字符集以支持emoji
- 建立合适的索引但不超过5个
- 金额相关字段使用DECIMAL(10,2)类型
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心功能模块实现
2.1 统一身份认证模块
采用JWT实现无状态认证,解决分布式session问题:
java复制@Component
public class JwtTokenProvider {
private final String secretKey;
private final long validityInMilliseconds;
public JwtTokenProvider(
@Value("${security.jwt.token.secret-key}") String secretKey,
@Value("${security.jwt.token.expire-length}") long validityInMilliseconds) {
this.secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
this.validityInMilliseconds = validityInMilliseconds;
}
public String createToken(String username, List<String> roles) {
Claims claims = Jwts.claims().setSubject(username);
claims.put("roles", roles);
Date now = new Date();
Date validity = new Date(now.getTime() + validityInMilliseconds);
return Jwts.b
