—— SAST

各位同学,大家好……(此处省略几百字寒暄部分)。于是举办 WoC 活动来供大家学习与练手。

要求

背景

在 SAST,大家都很喜欢画饼,甚至有半块白板上面都是饼,现在请你开发一个管理大家在 SAST 画的饼的后端(SAST-Pancake)。

使用 Spring Boot 实现一个简单的管理系统。如果你会使用 Golang,也可以使用其他的 Go 语言的框架。

数据库

实现基本的增删改查功能,能够对SAST的画过的饼进行增加、删除、修改、查询操作。

数据库的建表语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- 用户表
DROP TABLE IF EXISTS sast_pancake.`user`;
create table if not exists sast_pancake.`user`
(
`id` int not null auto_increment comment 'ID' primary key,
`username` varchar(255) not null comment '用户名',
`password` varchar(255) not null comment '密码',
`role` int default 0 not null comment '角色'
) comment '用户表';

-- pancake表
DROP TABLE IF EXISTS sast_pancake.`pancake`;
create table if not exists sast_pancake.`pancake`
(
`id` int not null auto_increment comment 'ID' primary key,
`title` varchar(255) not null comment '标题',
`create_time` date not null comment '创建时间',
`ddl` date not null comment '截至时间',
`is_done` tinyint default 0 not null comment '是否完成 (未完成: 0; 完成: 1)'
) comment 'pancake表';

-- 添加基本信息
insert into sast_pancake.`user` (`id`, `username`, `password`, `role`) values (null, '张三', 'admin123', 1);
insert into sast_pancake.`user` (`id`, `username`, `password`, `role`) values (null, '李四', 'user01123', 0);
insert into sast_pancake.`user` (`id`, `username`, `password`, `role`) values (null, '李枫', 'user02123', 0);
insert into sast_pancake.`user` (`id`, `username`, `password`, `role`) values (null, '花枫', 'user03123', 0);
insert into sast_pancake.`user` (`id`, `username`, `password`, `role`) values (null, '秋山澪', 'user04123', 0);
insert into sast_pancake.`pancake` (`id`, `title`, `create_time`, `ddl`, `is_done`) values (null, 'SAST-EVENTO', '2023-07-01', '2023-10-24', 1);
insert into sast_pancake.`pancake` (`id`, `title`, `create_time`, `ddl`, `is_done`) values (null, 'SAST-OS', '2023-10-01', '2025-10-01', 0);

功能

接口文档在群文件里面

登录&鉴权

我们平时开发中,登录的要求十分常见,所以我们需要大家实现登录功能,并且具有权限管理功能

权限管理,就是基于角色访问控制。场景举例:

给张三赋予 “管理员” 角色,“管理员” 具有 “画饼” 和 “删除饼” 的权限。此时张三能够进入系统,则可以进行这些操作;而李四只是普通用户,他只能查看自己的员工信息,不能添加员工和删除员工等等操作。

在数据库表中,role 这个字段我们可以用来识别用户的权限,如 1 是管理员,0 是普通用户。我们在登录的时候判断用户的身份,然后让他们可以执行一些符合他们权限的操作。

权限管理的技术栈的选择,可以使用 Session 配合过滤器拦截器、Spring Security、JWT、Shiro 等等,有精力的同学可以逐个进行研究。这边建议大家先看看 JWT 捏。

可以了解了解权限管理需要的一些知识如 token 等,可以看看下面这个视频了解一下 token、session、cookie:

【Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?】 https://www.bilibili.com/video/BV1ob4y1Y7Ep

请大家完成后使用 Apifox 或者 postman 测试之后提交到仓库中,我们之后会通知大家交作业。

实现关于饼的接口

主要是关于饼的增删改查

返回格式

在实际开发中,后端返回的数据需要有一个统一的返回格式,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//成功样例
{
"success": false,
"errCode": null,
"errMsg": null,
"data": {
"pancakes": [
{
"id": 1,
"title": "上花元准离",
"createTime": "2022-09-24",
"ddl": "2023-02-15",
"isDone": true
},
{
"id": 2,
"title": "素或据",
"createTime": "2023-10-20",
"ddl": "2023-03-17",
"isDone": false
}
]
}
}

//失败样例
{
"success": false,
"errCode": 1004,
"errMsg": "无权限",
"data": null
//success:Boolean 表示这次请求是否成功
//errMsg:String 表示如果请求失败(即发生异常)
//errCode:Integer 表示请求失败的错误码
//data:Object 真正返回的数据
}

请你自行学习如何使用全局异常处理全局统一返回的使用。

这个嘛随便一搜:

Spring Boot 如何统一后端返回格式?老鸟们都是这样玩的! - 掘金 (juejin.cn)

Spring Boot统一接口返回和全局异常处理 - 掘金 (juejin.cn)

可以参考一下。

选做

直接在数据库里面存储密码并不是一件安全的事情,在将密码存进数据库之前往往会进行密码加密,请你完成用户注册和密码加密相关功能。

学有余力的同学也可以尝试了解下面的一些技术:

  • 了解前端三大件:HTMLCSSJS
  • 学习 Linux 基础,可以选择使用 VMware 搭建虚拟机(群里面有绿色版)或购入一台云服务器作为学习机
  • 学习使用 Redis,整合进入 Spring Boot 中
  • 学习使用 AOP (面向切面编程),可以整合日志功能或者鉴权功能
  • 了解使用 Mybatis-Plus 加大开发效率(这个最好是你能写一些 SQL 之后再学吧,尽量熟悉 SQL 语句)
  • 了解 docker 并掌握基本使用

活动时间

企划发布日 —— 2023.12.17

2023.12.17 —— 2024.2.25

暂定提交时间为 2024.2.25 ——2024.3.1

审核结果将在收齐后一周内呈现

提交方式

  1. 将作品上传至 GitHub,并提交 GitHub 链接
  2. 将作品直接打包
  3. 暂不接受其他提交方式
  4. 联系讲师(QQ)

参与方式与审核方式

  1. 进群即可视为报名参加:
    • 前端组群:515507470
    • 后端组群:825624516
  2. 参与本次活动的所有 2023 级新生同学,无论是否已加入校科协,只要完成主要功能,都有机会成为南邮校科协中干。
  3. 作品提交后需要在开学后进行一次短暂的线下交流,并对作品进行评判。(视情况可能做出变化)

其他注意事项

借鉴已存在的优秀作品,我们也欢迎大家对优秀作品进行“临摹”,但禁止代码片段的抄袭。借鉴与抄袭的分界点由校科协内部标准划定。

如果在活动过程中遇到问题,或对企划有异议,欢迎找讲师提问。