HeQihan

HeQihan

学生信息系统 (StudentInfoSystem)介绍

之前写了爬取教务系统的代码,前端不想动了,放在 GitHub 上谁需要就拿吧。写得非常烂,多包涵,毕竟寒假才开始学😂。

项目概述#

学生信息系统是一个基于微服务架构的应用程序,旨在提供学生信息管理的完整解决方案。系统通过爬虫技术从学校教务系统获取数据,并提供统一的 API 接口供前端或其他系统调用。

本系统采用分布式微服务架构,每个服务负责特定的功能域,通过 API 网关统一对外提供服务。系统使用 JWT 进行身份验证和授权,确保数据安全和用户隐私。

系统架构#

系统由以下六个主要微服务组成:

1. 认证服务 (AuthService)#

负责用户认证和授权管理,是系统安全的核心组件。

主要功能:

  • 用户登录验证

  • JWT 令牌生成与管理

  • 令牌验证与刷新

  • 浏览器自动化登录实现

核心组件:

  • LoginService: 处理用户登录请求,生成 JWT 令牌

  • BrowserManager: 管理 Playwright 浏览器实例,实现自动化登录

2. 公共库 (Common)#

包含所有服务共享的组件,确保代码复用和一致性。

主要内容:

  • 数据模型 (Models):定义系统中使用的数据结构

  • 中间件 (Middleware):如 API 安全中间件

  • 过滤器 (Filters):如年份限制过滤器

  • 通用服务 (Services):如登录服务、解析服务等

  • 工具类:提供通用功能

核心组件:

  • AuthModels: 定义认证相关的数据模型

  • StudentInfoParser: 解析学生信息 HTML

  • GradeParser: 解析成绩信息 HTML

  • ScheduleParserService: 解析课表信息 HTML

3. API 网关 (Gateway)#

作为系统的统一入口,负责请求路由和负载均衡。

主要功能:

  • 请求路由:将请求转发到相应的微服务

  • API 聚合:组合多个服务的结果

  • 跨域资源共享 (CORS):处理前端跨域请求

  • 请求限流:防止服务过载

技术实现:

  • 使用 YARP 作为反向代理

  • 集成 JWT 认证

  • 配置化路由规则

4. 成绩服务 (GradeService)#

负责获取和管理学生成绩信息。

主要功能:

  • 查询学生历史成绩

  • 成绩统计与分析

  • 成绩数据爬取与解析

核心组件:

  • GradeService: 处理成绩查询请求

  • GradeParser: 解析成绩 HTML 数据

5. 课表服务 (ScheduleService)#

负责获取和管理学生课表信息。

主要功能:

  • 查询当前学期课表

  • 按学年学期查询历史课表

  • 课表数据爬取与解析

  • 课表格式化输出

核心组件:

  • CourseScheduleService: 处理课表查询请求

  • ScheduleParserService: 解析课表 HTML 数据

6. 学生信息服务 (StudentService)#

负责获取和管理学生基本信息。

主要功能:

  • 学籍信息查询

  • 个人信息查询

  • 联系方式查询

  • 学生信息爬取与解析

核心组件:

  • StudentInfoService: 处理学生信息查询请求

  • StudentInfoCrawlerService: 爬取学生信息

  • StudentInfoParser: 解析学生信息 HTML 数据

技术栈#

  • 后端框架: ASP.NET Core 8.0

  • 认证授权: JWT (JSON Web Token)

  • API 文档: Swagger

  • 浏览器自动化: Microsoft Playwright

  • HTML 解析: HtmlAgilityPack

  • API 网关: YARP

  • 日志记录: 内置.NET 日志系统

  • 依赖注入: 内置.NET DI 容器

  • HTTP 客户端: HttpClient

系统工作流程#

  1. 用户认证流程:

   - 用户通过 Gateway 发送登录请求到 AuthService

   - AuthService 使用 Playwright 模拟浏览器登录教务系统

   - 验证成功后生成 JWT 令牌返回给用户

   - 用户后续请求携带 JWT 令牌访问其他服务

  1. 数据获取流程:

   - 用户携带 JWT 令牌请求特定服务 (成绩 / 课表 / 学生信息)

   - 服务验证令牌有效性

   - 服务使用 Playwright 爬虫从教务系统获取数据

   - 使用专用解析器解析 HTML 数据

   - 将解析后的数据返回给用户

  1. 服务间通信:

   - 服务之间通过 HTTP API 进行通信

   - 共享数据模型确保数据一致性

   - 使用依赖注入管理服务依赖

环境要求#

  • .NET SDK: 8.0

  • 操作系统: Windows/macOS/Linux (支持.NET 8.0 的任何系统)

  • 内存: 至少 2GB RAM (推荐 4GB 以上)

  • 存储: 至少 1GB 可用空间

  • 网络: 稳定的互联网连接

安装与配置#

前提条件#

  1. 安装.NET 8.0 SDK

   # 检查是否已安装

   dotnet --version

  1. 安装 Playywright

    dotnet tool install --global Microsoft.Playwright.CLI

    playwright install

  1. 克隆仓库

    git clone https://github.com/ExXTong/StudentInfoSystem

    cd StudentInfoSystem

配置服务#

每个服务都有自己的 appsettings.json 配置文件,需要根据实际环境进行配置:

JWT 配置


    {

      "Jwt": {

        "Secret": "your_secret_key",

        "Expiration": "12:00:00"

      }

    }

构建与运行#

构建项目#


dotnet restore

dotnet build

运行服务#

需要按照依赖顺序启动各个服务,当然需要开多个终端:

  1. 启动认证服务


cd StudentInfoSystem.AuthService

dotnet run

  1. 启动学生信息服务

cd StudentInfoSystem.StudentService

dotnet run

  1. 启动成绩服务

cd StudentInfoSystem.GradeService

dotnet run

  1. 启动课表服务

cd StudentInfoSystem.ScheduleService

dotnet run

  1. 启动 API 网关

cd StudentInfoSystem.Gateway

dotnet run

API 文档#

服务启动后,可以通过以下 URL 访问各服务的 Swagger 文档:

记得使用 https 以及关闭不必要的端口。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。