# 论坛 **Repository Path**: YY_MUYI/forum ## Basic Information - **Project Name**: 论坛 - **Description**: 一个交流论坛 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-07-13 - **Last Updated**: 2024-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 论坛 #### 在线演示地址 ##### 1.14.204.17 #### 项目介绍 自搭建的一个为小众领域同好提供交流平台的论坛,功能包括注册登录、内容发布、用户互动、内容搜索、系统通知、内容分享、数据统计等,并做了一定的性能优化。 #### 软件架构 前端以模板引擎Thymeleaf为主。 后端以SpringBoot搭建。 数据库选用MySQL,使用Mybatis实现CRUD。 整合使用了Redis、Zookeeper、Kafka、Quartz、Elasticsearch等中间件。 #### 功能说明 一.注册登录模块 1. 注册:访客可使用邮箱验证进行账号注册,如输入的邮箱和用户名均未注册,则系统生成带激活链接的邮件发送至邮箱,用户在邮箱点击链接后账号激活为可用状态并跳转登录。 2. 登录:输入正确的邮箱、验证码和登录密码即可完成登录。 登录凭证存储至Redis并生成Cookie返回,有效期内用户可直接登录。 验证码使用Kaptcha生成并使用Redis缓存,将key作为持有者信息和验证码图片用Cookie返回给客户端,验证时比较用户输入的验证码和持有者信息在Redis中对应验证码值是否匹配。 3. 忘记密码:可通过邮箱验证重设密码,系统会生成并发送带验证码的邮件到目标邮箱,用户输入正确验证码和新密码后即可完成密码重置。 二.论坛核心模块 1. 发帖:登录用户可自定义发帖主题和内容并发布帖子。 2. 评论: 用户可在自己或其他用户的帖子下进行评论。 3. 回复:用户可对帖子下的评论进行回复,也可对回复内容进行回复。 4. 内容过滤:基于前缀树算法配置过滤器实现对用户发布内容的敏感词过滤。 5. 内容搜索:整合Elasticsearch引擎实现内容搜索,搜索关键词返回标题或内容中含有匹配字段的帖子列表。 6. 私信:用户可对指定用户发送私信,对方也可回复私信,私信页面显示双方对话记录。 7. 关注:用户可以对其他用户进行关注和取关。 8. 点赞:用户可对帖子、评论和回复内容进行点赞和取消点赞。 9. 个人详情:可查看用户的关注者和被关注者人数,点击查看关注者和被关注者列表,可点击跳转对应用户详情; 可查看用户的历史发帖和历史回复,以列表形式展示,可点击跳转对应的帖子页面。 三.扩展功能 1. 权限控制: 使用SpringSecurity实现基于权限字符的用户访问控制。 登录用户才能使用论坛核心模块功能。 拥有管理员权限可对帖子进行置顶、加精、删除,可查看网站在自定义时间段内的UV和DAU数据统计。 拥有版主权限可对帖子进行置顶、加精操作。 普通用户只能使用其其余论坛功能。 2. 系统通知: 使用Kafka实现基于消息队列的系统通知功能。用户产生评论、点赞、关注等行为时,会触发对应类型的事件,使用KafkaTemple将内容发布到Kafka对应类型的主题,消费者线程监听各个类型主题,如有消息产生则消费消息并生成对应类型的系统通知消息发送给目标用户。 用户点击导航栏“消息”-“系统通知”可查看收到的点赞、关注、评论通知,点击进入对应类型通知列表,可点击查看跳转对应内容页面。 3. 热帖排行功能: 使用Quartz实现后台线程定时计算帖子分数,实现热帖排行功能。 帖子分数计算方式为:分数= log10(加精*75+评论数*10+赞数* 2)+ 发帖日期距基准日期天数*0.1。 4. 网站数据统计: 使用Redis的HyperLogLog通过用户IP排重实现网站独立访客(UV)统计,使用Bitmap实现网站日活跃用户(DAU)统计。管理员权限账号可以查看网站数据统计。 5. 生成长图分享: 使用wkhtmltopdf实现生成长图功能,可将当前页面内容生成为图片,上传至云存储生成链接作为分享链接实现内容分享功能。 6. 性能优化: 使用Caffeine缓存热帖列表等热点数据以优化网站性能。 7. 部署上线: 使用Tomcat将项目部署到云服务器,并使用Nginx反向代理转发访问到Tomcat指定端口。用户可直接通过服务器ip地址访问网站。