C-CodeLab 是一个基于 Web 的在线 C 语言编程学习平台,提供实时代码编译、执行和结果展示功能。学生可以在浏览器中编写 C 代码,实时查看编译和执行结果,支持代码保存和历史记录查询。
- 🔐 JWT 认证系统 - 安全的用户认证和授权
- 💻 在线代码编辑器 - 支持语法高亮的代码编辑
- ⚡ 实时代码执行 - 支持 C 语言代码的在线编译和执行(在Docker沙箱中安全执行)
- 💾 代码保存管理 - 支持代码片段的保存和分类
- 📊 执行历史记录 - 查看历史执行记录和结果
- 🔄 WebSocket 推送 - 实时推送执行结果
- 👤 用户个人中心 - 个人信息管理和设置
- Java 17 - 编程语言
- Spring Boot 3.3.3 - 应用框架
- Spring Security 6 - 安全框架
- Spring Data JPA - 数据访问层
- JWT (jjwt) - 无状态认证
- Redis - 缓存和会话管理
- MySQL/TiDB - 数据存储
- WebSocket - 实时通信
- Maven - 依赖管理
- Vue 3 - 前端框架
- TypeScript - 类型安全
- Pinia - 状态管理
- Axios - HTTP 客户端
- Vite - 构建工具
- Element Plus - UI 组件库
- Java 17+
- Node.js 18+
- Maven 3.6+
- MySQL 8.0+ 或 TiDB
- Redis 6.0+
- 克隆项目
git clone https://github.com/your-username/C-CodeLab.git
cd C-CodeLab- 配置数据库
# backend/src/main/resources/application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/codelab?useSSL=false&serverTimezone=UTC
username: your_username
password: your_password
data:
redis:
host: localhost
port: 6379
password: your_redis_password- 启动后端服务
cd backend
mvn clean package -DskipTests
java -jar target/c-codelab-0.0.1-SNAPSHOT.jar- 启动前端服务
cd front
npm install
npm run dev- 访问应用
- 前端地址:http://localhost:3000
- 后端API:http://localhost:8081
| 接口 | 方法 | 描述 | 请求体 |
|---|---|---|---|
/api/auth/register |
POST | 用户注册 | {username, password, confirmPassword, email} |
/api/auth/login |
POST | 用户登录 | {username, password} |
/api/auth/logout |
POST | 用户登出 | 需要 Authorization 头 |
/api/user |
GET | 获取用户信息 | 需要 Authorization 头 |
| 接口 | 方法 | 描述 | 请求体 |
|---|---|---|---|
/api/code/run |
POST | 执行代码 | {code, title?} |
/api/code/save |
POST | 保存代码 | {title, codeContent, language, isPublic} |
/api/code/list |
GET | 获取代码列表 | 需要 Authorization 头 |
| 接口 | 方法 | 描述 | 请求体 |
|---|---|---|---|
/api/result/list |
GET | 获取执行历史 | 需要 Authorization 头 |
| 端点 | 描述 | 认证 |
|---|---|---|
/ws/execution-result |
执行结果推送 | 需要 JWT Token |
项目支持 MySQL 和 TiDB 数据库:
spring:
datasource:
url: jdbc:mysql://your-host:3306/your-database
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driverspring:
data:
redis:
host: your-redis-host
port: 6379
password: your_redis_password
ssl:
enabled: true # 如果使用 SSLjwt:
secret: your-secret-key # 生产环境请使用强密钥
expiration: 86400000 # 24小时(毫秒)- 启动后端
cd backend
mvn spring-boot:run- 启动前端
cd front
npm run dev- 构建沙箱镜像(只需执行一次)
# Windows
.\docker-start-sandbox.bat
# Linux/Mac
chmod +x docker-start-sandbox.sh
./docker-start-sandbox.sh- 启动后端服务
cd backend
mvn spring-boot:run- 启动前端服务
cd front
npm install
npm run dev- 访问应用
注意:C代码执行在Docker沙箱中进行,Java后端和前端在本地运行,数据库和Redis使用原有云服务配置。详细说明请查看 本地运行说明.md 和 DOCKER沙箱使用说明.md
- 构建后端
cd backend
mvn clean package -DskipTests- 构建前端
cd front
npm run build- 部署
# 后端
java -jar target/c-codelab-0.0.1-SNAPSHOT.jar
# 前端(使用 Nginx 或其他 Web 服务器)
# 将 dist 目录部署到 Web 服务器C-CodeLab/
├── backend/ # 后端项目
│ ├── src/main/java/
│ │ └── com/codelab/
│ │ ├── application/ # 应用服务层
│ │ ├── domain/ # 领域模型
│ │ ├── infrastructure/ # 基础设施层
│ │ ├── interfaces/ # 接口层
│ │ └── service/ # 业务服务
│ ├── src/main/resources/
│ │ ├── application.yml # 配置文件
│ │ └── sql/ # SQL 脚本
│ └── pom.xml # Maven 配置
├── front/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 接口
│ │ ├── components/ # Vue 组件
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── utils/ # 工具函数
│ │ └── views/ # 页面视图
│ ├── package.json # 依赖配置
│ └── vite.config.ts # Vite 配置
├── docs/ # 文档目录
│ ├── 后端详细设计.md
│ ├── 前端详细设计.md
│ └── JWT认证系统实现说明.md
└── README.md # 项目说明
- 无状态认证 - 支持水平扩展
- 令牌管理 - Redis 存储有效令牌
- 自动过期 - 24小时令牌有效期
- 安全签名 - HS512 算法签名
- BCrypt 哈希 - 强度12的密码加密
- 随机盐值 - 每个用户独立盐值
- 密码策略 - 强密码要求
- Docker沙箱隔离 - 用户提交的C代码在独立的Docker容器中执行,完全隔离
- 资源限制 - 内存128MB、CPU 0.5核、进程数限制10个、执行超时5秒
- 网络隔离 - 沙箱容器无网络访问权限
- 输入验证 - 代码长度限制10KB,严格的输入参数验证
- 自动清理 - 执行完成后自动删除容器和临时文件
- 本地服务运行 - Java后端和前端在本地运行,只有C代码在沙箱中执行
cd backend
mvn testcd front
npm run test用户注册
curl -X POST http://localhost:8081/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "TestPass123!",
"confirmPassword": "TestPass123!",
"email": "test@example.com"
}'用户登录
curl -X POST http://localhost:8081/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "TestPass123!"
}'代码执行
curl -X POST http://localhost:8081/api/code/run \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"code": "#include <stdio.h>\nint main(){ printf(\"Hello, World!\\n\"); return 0; }",
"title": "Hello World"
}'- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 开发者 - Alive0103
- 项目链接 - https://github.com/Alive0103/XDU-CS-labb
- Spring Boot 团队提供的优秀框架
- Vue.js 团队提供的前端框架
- 所有开源贡献者的支持
如有问题或建议,请通过以下方式联系:
- 📧 Email: wangyueyang_xd26@163.com
- 🐛 Issues: GitHub Issues
- 💬 Discussions
⭐ 如果这个项目对您有帮助,请给它一个星标!