1. 项目背景与意义
近年来,电信网络诈骗案件持续高发,诈骗手段不断翻新,大学生群体由于社会经验不足、防范意识相对薄弱,已成为诈骗分子的重点目标。刷单返利、虚假购物、冒充客服、校园贷注销、游戏交易等诈骗类型在高校中屡见不鲜,给学生及其家庭造成了严重的经济损失和心理伤害。
传统的反诈骗宣传主要依赖线下讲座、张贴海报、发放宣传单等方式,存在覆盖面有限、内容更新滞后、学生参与度低等问题。与此同时,学生之间缺乏便捷的交流渠道,遇到可疑情况时往往不知道向谁求助,也难以快速获取权威的防骗指导。
基于上述背景,本课题设计并实现一个基于Spring Boot的学生反诈骗宣传与交流平台,旨在通过信息化手段整合反诈宣传资源,提供在线学习、案例警示、风险交流、举报求助等一站式服务,帮助学生提升防骗意识和识别能力,营造校园反诈的良好氛围,具有重要的现实意义和应用价值。
2. 系统需求分析
2.1 功能需求
本平台面向学生、管理员两类角色,核心功能需求如下:
- 用户管理:学生注册、登录、个人信息维护;管理员对用户进行审核与管理。
- 反诈宣传:发布和浏览反诈骗文章、防骗指南、典型案例,支持分类检索与关键词搜索。
- 交流社区:学生可发布帖子、评论互动,分享疑似诈骗经历,互相提醒警示。
- 风险举报:学生可提交可疑电话、短信、链接等信息,管理员核实后发布预警公告。
- 学习测试:提供反诈知识题库,学生在线答题,检验学习效果。
- 公告通知:管理员发布校园反诈公告、紧急预警,学生端实时查看。
2.2 非功能需求
- 安全性:用户密码加密存储,接口权限校验,防止越权访问。
- 易用性:界面简洁清晰,操作流程直观,适合学生快速上手。
- 可维护性:采用分层架构,模块解耦,便于后续功能扩展与维护。
- 性能:常规并发场景下页面响应时间控制在合理范围内,保证良好体验。
3. 系统技术栈
本系统采用前后端分离的开发模式,具体技术选型如下:
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.7 | 简化配置,快速构建独立运行的微服务应用 |
| 持久层框架 | MyBatis-Plus | 增强MyBatis,提供通用CRUD、分页查询能力 |
| 数据库 | MySQL 8.0 | 存储用户、文章、帖子、举报等业务数据 |
| 安全认证 | Spring Security + JWT | 实现用户认证与接口授权,无状态令牌机制 |
| 前端框架 | Vue 3 + Element Plus | 构建响应式管理后台与用户端页面 |
| 构建工具 | Maven | 项目依赖管理与构建打包 |
| 接口文档 | Swagger / Knife4j | 自动生成在线接口文档,便于前后端联调 |
4. 系统总体设计
4.1 系统架构设计
系统整体采用B/S架构,分为表现层、业务逻辑层、数据访问层三层结构。表现层由Vue前端负责页面渲染与用户交互,通过RESTful API与后端通信;业务逻辑层由Spring Boot提供接口服务,处理业务规则与数据校验;数据访问层通过MyBatis-Plus操作MySQL数据库,完成数据持久化。
flowchart TD A[学生浏览器] --> B[Vue前端页面] C[管理员浏览器] --> B B --> D[Spring Boot后端接口] D --> E[业务逻辑层 Service] E --> F[数据访问层 Mapper] F --> G[(MySQL数据库)] D --> H[JWT认证与权限拦截]4.2 数据库设计
系统核心数据表包括用户表、文章表、帖子表、评论表、举报表、题库表等。以用户表和文章表为例,表结构设计如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键,自增 |
| username | varchar(50) | 登录用户名,唯一 |
| password | varchar(100) | 加密后的密码 |
| real_name | varchar(50) | 真实姓名 |
| student_no | varchar(20) | 学号 |
| role | tinyint | 角色:0学生,1管理员 |
| status | tinyint | 账号状态:0禁用,1正常 |
| create_time | datetime | 注册时间 |
5. 核心功能实现
5.1 用户登录认证
系统采用Spring Security结合JWT实现无状态认证。用户登录成功后,后端生成JWT令牌返回给前端,前端在后续请求中携带该令牌,后端通过拦截器校验令牌有效性并识别用户身份。
@RestController @RequestMapping("/api/auth") public class AuthController { @Resource private AuthService authService; @PostMapping("/login") public Result<LoginVO> login(@RequestBody LoginDTO dto) { LoginVO vo = authService.login(dto); return Result.success(vo); } @PostMapping("/register") public Result<Void> register(@RequestBody RegisterDTO dto) { authService.register(dto); return Result.success(); } }@Service public class AuthServiceImpl implements AuthService { @Resource private UserMapper userMapper; @Resource private PasswordEncoder passwordEncoder; @Resource private JwtUtil jwtUtil; @Override public LoginVO login(LoginDTO dto) { User user = userMapper.selectByUsername(dto.getUsername()); if (user == null || !passwordEncoder.matches(dto.getPassword(), user.getPassword())) { throw new BusinessException("用户名或密码错误"); } if (user.getStatus() == 0) { throw new BusinessException("账号已被禁用"); } String token = jwtUtil.generateToken(user.getId(), user.getRole()); LoginVO vo = new LoginVO(); vo.setToken(token); vo.setUsername(user.getUsername()); vo.setRole(user.getRole()); return vo; } @Override public void register(RegisterDTO dto) { if (userMapper.selectByUsername(dto.getUsername()) != null) { throw new BusinessException("用户名已存在"); } User user = new User(); user.setUsername(dto.getUsername()); user.setPassword(passwordEncoder.encode(dto.getPassword())); user.setRealName(dto.getRealName()); user.setStudentNo(dto.getStudentNo()); user.setRole(0); user.setStatus(1); userMapper.insert(user); } }5.2 反诈文章管理
管理员通过后台发布反诈宣传文章,学生端可按分类浏览和搜索。文章模块采用分页查询,支持标题模糊搜索和分类筛选。
@Service public class ArticleServiceImpl implements ArticleService { @Resource private ArticleMapper articleMapper; @Override public PageResult<ArticleVO> pageArticles(ArticleQuery query) { Page<Article> page = new Page<>(query.getPageNum(), query.getPageSize()); LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasText(query.getKeyword())) { wrapper.like(Article::getTitle, query.getKeyword()); } if (query.getCategoryId() != null) { wrapper.eq(Article::getCategoryId, query.getCategoryId()); } wrapper.eq(Article::getStatus, 1); wrapper.orderByDesc(Article::getCreateTime); Page<Article> result = articleMapper.selectPage(page, wrapper); return PageResult.of(result.getRecords(), result.getTotal()); } @Override public ArticleVO getArticleDetail(Long id) { Article article = articleMapper.selectById(id); if (article == null) { throw new BusinessException("文章不存在"); } articleMapper.increaseViewCount(id); ArticleVO vo = new ArticleVO(); BeanUtils.copyProperties(article, vo); return vo; } }5.3 交流社区与评论
学生可在社区发布帖子,分享疑似诈骗经历或求助信息,其他用户可进行评论互动。帖子发布后需经过管理员审核,审核通过后公开展示,防止不良信息传播。
@Service public class PostServiceImpl implements PostService { @Resource private PostMapper postMapper; @Resource private CommentMapper commentMapper; @Override @Transactional(rollbackFor = Exception.class) public void createPost(PostDTO dto, Long userId) { Post post = new Post(); post.setUserId(userId); post.setTitle(dto.getTitle()); post.setContent(dto.getContent()); post.setStatus(0); post.setCreateTime(LocalDateTime.now()); postMapper.insert(post); } @Override public PageResult<PostVO> pageApprovedPosts(PostQuery query) { Page<Post> page = new Page<>(query.getPageNum(), query.getPageSize()); LambdaQueryWrapper<Post> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Post::getStatus, 1); wrapper.orderByDesc(Post::getCreateTime); Page<Post> result = postMapper.selectPage(page, wrapper); return PageResult.of(result.getRecords(), result.getTotal()); } @Override public void addComment(CommentDTO dto, Long userId) { Comment comment = new Comment(); comment.setPostId(dto.getPostId()); comment.setUserId(userId); comment.setContent(dto.getContent()); comment.setCreateTime(LocalDateTime.now()); commentMapper.insert(comment); } }5.4 风险举报与预警
学生遇到可疑电话、短信或链接时,可在线提交举报信息。管理员核实后,将确认为诈骗的信息发布为预警公告,提醒全体学生注意防范。
@Service public class ReportServiceImpl implements ReportService { @Resource private ReportMapper reportMapper; @Resource private NoticeMapper noticeMapper; @Override public void submitReport(ReportDTO dto, Long userId) { Report report = new Report(); report.setUserId(userId); report.setReportType(dto.getReportType()); report.setContent(dto.getContent()); report.setContactInfo(dto.getContactInfo()); report.setStatus(0); report.setCreateTime(LocalDateTime.now()); reportMapper.insert(report); } @Override @Transactional(rollbackFor = Exception.class) public void verifyReport(Long reportId, Integer status, Long adminId) { Report report = reportMapper.selectById(reportId); if (report == null) { throw new BusinessException("举报记录不存在"); } report.setStatus(status); report.setVerifyTime(LocalDateTime.now()); report.setAdminId(adminId); reportMapper.updateById(report); if (status == 1) { Notice notice = new Notice(); notice.setTitle("反诈预警:" + report.getReportType()); notice.setContent("近期有学生举报" + report.getContent() + ",经核实存在诈骗风险,请同学们提高警惕。"); notice.setCreateTime(LocalDateTime.now()); noticeMapper.insert(notice); } } }6. 系统测试与总结
本系统在完成编码后,针对用户登录、文章浏览、帖子发布、评论互动、举报提交等核心功能进行了功能测试,测试结果表明各模块运行正常,接口响应符合预期,数据交互准确无误。同时,系统在安全性方面采用了密码加密存储和JWT权限校验,有效保障了用户数据安全。
基于Spring Boot的学生反诈骗宣传与交流平台,实现了反诈宣传、交流互动、风险举报、学习测试等核心功能,为学生提供了便捷的防骗学习与求助渠道,为学校开展反诈教育工作提供了有力的信息化支撑。后续可在智能识别诈骗信息、消息推送提醒、数据分析预警等方面进一步优化和扩展,持续提升平台的反诈服务能力。