牛客社区论坛系统是一个基于 Spring Boot 开发的社区交流平台,类似于牛客网。系统提供了完整的用户管理、帖子发布、评论互动、点赞关注、私信通知、全文搜索等核心功能,支持用户注册登录、邮件激活、敏感词过滤、数据统计等特性。
- 框架: Spring Boot 2.3.7
- 持久层: MyBatis 2.1.4
- 数据库: MySQL 8.0
- 缓存: Redis (Spring Data Redis)
- 搜索引擎: Elasticsearch 7.x
- 消息队列: Apache Kafka
- 安全框架: Spring Security
- 模板引擎: Thymeleaf
- 邮件服务: Spring Mail
- 验证码: Kaptcha 2.3.2
- 工具库:
- Lombok
- FastJSON 1.2.78
- Apache Commons Lang3 3.9
- 模板引擎: Thymeleaf
- 样式: CSS3
- 脚本: JavaScript
- 用户注册(邮箱验证)
- 用户登录(验证码、记住我)
- 邮件激活账户
- 忘记密码(邮件找回)
- 个人资料管理
- 头像上传
- 权限管理(普通用户、版主、管理员)
- 发布帖子
- 查看帖子详情
- 帖子列表(分页)
- 帖子置顶
- 帖子加精
- 帖子删除
- 帖子搜索(Elasticsearch)
- 评论帖子
- 回复评论
- 评论列表(分页)
- 评论点赞
- 点赞功能(帖子、评论)
- 关注/取消关注用户
- 粉丝列表
- 关注列表
- 私信发送
- 私信列表
- 系统通知(评论、点赞、关注)
- 未读消息统计
- 全文搜索(Elasticsearch)
- 搜索结果高亮
- 搜索结果分页
- UV(独立访客)统计
- DAU(日活跃用户)统计
- 数据可视化展示
- 敏感词过滤
- 登录拦截器
- 权限拦截器
- 异常统一处理
niuke/
├── src/main/java/com/niukedemo/
│ ├── annotation/ # 自定义注解
│ │ └── LoginRequired.java
│ ├── aspect/ # AOP切面
│ │ └── ServiceAspect.java
│ ├── config/ # 配置类
│ │ ├── EsConfig.java # Elasticsearch配置
│ │ ├── KaptchaConfig.java # 验证码配置
│ │ ├── RedisConfig.java # Redis配置
│ │ ├── SecurityConfig.java # 安全配置
│ │ └── WebMvcConfig.java # Web MVC配置
│ ├── controller/ # 控制器层
│ │ ├── advice/ # 异常处理
│ │ ├── interceptor/ # 拦截器
│ │ ├── CommentController.java # 评论控制器
│ │ ├── DataController.java # 数据统计控制器
│ │ ├── DiscussPostController.java # 帖子控制器
│ │ ├── FollowController.java # 关注控制器
│ │ ├── HomeController.java # 首页控制器
│ │ ├── LikeController.java # 点赞控制器
│ │ ├── LoginController.java # 登录控制器
│ │ ├── MessageController.java # 消息控制器
│ │ ├── SearchController.java # 搜索控制器
│ │ └── UserController.java # 用户控制器
│ ├── entity/ # 实体类
│ │ ├── Comment.java
│ │ ├── DiscussPost.java
│ │ ├── Event.java
│ │ ├── LoginTicket.java
│ │ ├── Message.java
│ │ ├── Page.java
│ │ └── User.java
│ ├── event/ # 事件处理
│ │ ├── EventConsumer.java # 事件消费者
│ │ └── EventProducer.java # 事件生产者
│ ├── mapper/ # 数据访问层
│ │ ├── elasticsearch/ # Elasticsearch Repository
│ │ ├── CommentMapper.java
│ │ ├── DiscussPostMapper.java
│ │ ├── LoginTicketMapper.java
│ │ ├── MessageMapper.java
│ │ └── UserMapper.java
│ ├── service/ # 服务层
│ │ ├── CommentService.java
│ │ ├── DataService.java
│ │ ├── DiscussPostService.java
│ │ ├── ElasticsearchService.java
│ │ ├── FollowService.java
│ │ ├── LikeService.java
│ │ ├── MessageService.java
│ │ └── UserService.java
│ ├── util/ # 工具类
│ │ ├── CommunityConstant.java # 常量定义
│ │ ├── CommunityUtil.java # 通用工具
│ │ ├── CookieUtil.java # Cookie工具
│ │ ├── HostHolder.java # 用户持有者
│ │ ├── MailClient.java # 邮件客户端
│ │ ├── RedisKeyUtil.java # Redis键工具
│ │ └── SensitiveFilter.java # 敏感词过滤
│ └── NiukeApplication.java # 启动类
├── src/main/resources/
│ ├── mapper/ # MyBatis映射文件
│ ├── static/ # 静态资源
│ │ ├── css/ # 样式文件
│ │ ├── js/ # JavaScript文件
│ │ └── img/ # 图片资源
│ ├── templates/ # 模板文件
│ │ ├── error/ # 错误页面
│ │ ├── mail/ # 邮件模板
│ │ └── site/ # 站点页面
│ ├── application.yml # 应用配置
│ └── sensitive-words.txt # 敏感词库
└── pom.xml # Maven配置
- JDK: 1.8+
- Maven: 3.6+
- MySQL: 5.7+ 或 8.0+
- Redis: 5.0+
- Elasticsearch: 7.x
- Kafka: 2.8+ (可选,用于异步消息处理)
git clone <repository-url>
cd niuke创建数据库 newcoder,并执行相应的建表SQL脚本。
编辑 src/main/resources/application.yml,配置以下内容:
- MySQL数据库连接信息
- Redis连接信息
- Elasticsearch连接信息
- Kafka连接信息(如使用)
- 邮件服务配置(SMTP)
- 文件上传路径
确保以下服务已启动:
- MySQL服务
- Redis服务
- Elasticsearch服务
- Kafka服务(如使用)
# 使用Maven运行
mvn spring-boot:run
# 或使用Maven Wrapper
./mvnw spring-boot:run # Linux/Mac
mvnw.cmd spring-boot:run # Windows浏览器访问:http://localhost:8080/community
# 数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/newcoder?serverTimezone=UTC&characterEncoding=utf-8
username: root
password: 123456
# Redis配置
redis:
host: 192.168.241.132
port: 6379
database: 0
# Elasticsearch配置
elasticsearch:
rest:
uris: 127.0.0.1:9200
# Kafka配置
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: test-consumer-group
# 邮件配置
mail:
host: smtp.qq.com
port: 587
username: your-email@qq.com
password: your-email-password
# 自定义配置
community:
path:
domain: http://localhost:8080
upload: E:\img # 文件上传路径
# 服务器配置
server:
servlet:
context-path: /community- 使用 Spring Security 进行安全控制
- 基于 Ticket 的登录凭证管理
- 支持"记住我"功能(12小时/100天)
- 自定义拦截器实现权限控制
- 使用 Kafka 实现异步事件处理
- 支持评论、点赞、关注等事件通知
- 解耦业务逻辑,提升系统性能
- 集成 Elasticsearch 实现全文搜索
- 支持中文分词(IK Analyzer)
- 实时同步帖子数据到搜索引擎
- Redis 缓存热点数据
- 点赞数据存储在 Redis
- 关注关系缓存优化
- 基于前缀树(Trie)算法
- 支持敏感词替换
- 可配置敏感词库
- 使用 Redis HyperLogLog 统计 UV
- 使用 Redis Bitmap 统计 DAU
- 提供数据可视化展示
- user: 用户表
- discuss_post: 帖子表
- comment: 评论表
- message: 消息表
- login_ticket: 登录凭证表
- follow: 关注关系表
- 用户与帖子:一对多
- 用户与评论:一对多
- 帖子与评论:一对多
- 评论与回复:一对多(自关联)
- 用户与用户:多对多(关注关系)
系统支持三种用户角色:
- 普通用户 (user): 基础功能权限
- 版主 (moderator): 可置顶、加精帖子
- 管理员 (admin): 所有权限,包括删除帖子
- 邮件配置: 需要配置有效的SMTP邮箱账号和授权码
- 文件上传: 确保配置的文件上传路径存在且有写权限
- Elasticsearch: 需要安装IK分词器插件
- Redis: 确保Redis服务正常运行
- 敏感词库: 可根据需要更新
sensitive-words.txt
- Spring Security 安全框架学习
- Thymeleaf 模板引擎使用
- 分布式系统设计
- 高并发系统优化
- 引入分布式Session(Redis Session)
- 实现分布式锁(Redis/Zookeeper)
- 添加消息队列削峰填谷
- 实现CDN加速静态资源
- 引入缓存预热机制
- 实现读写分离
- 添加监控和日志系统