{"repo":"windwj000/community","free":true,"listed":false,"github":"https://github.com/windwj000/community","clone":"git clone https://github.com/windwj000/community.git","description":"基于 Spring Boot + MyBatis + Thymeleaf 搭建的社区网站。","language":"HTML","stars":10,"topics":["java","spring-boot","mybatis","redis","kafka","elasticsearch"],"license":null,"category":"databases-storage","readme_excerpt":"目录 简介 系统架构图 运行网站 注册登录 发帖评论 私信 点赞关注 系统通知 搜索 其他 简介 基于 Spring Boot + MyBatis + Thymeleaf 开发的论坛社区网站，使用到了 MySQL、Redis、MyBatis、Kafka、Elasticsearch 等技术，实现了注册登录、发帖评论、私信、点赞关注、系统通知、搜索等功能。 这个项目主要适合 Java 开发初学者，将一些基础知识运用到实战中。我将分析各个功能用到技术，罗列一些我认为重要的点，针对后台部分，分步骤讲解本项目的实现，希望能帮助各位理解。 系统架构图 运行网站 在运行 CommunityApplication 类之前，需要启动 Redis 和 Elasticsearch 服务器。Kafka 运行时需要先启动 ZooKeeper 服务器，再启动 Kafka 服务器。 注册登录 这里开始是本项目的业务部分理解。 首页 用户 User 类和帖子 DiscussPost 类遵从一般后台业务开发流程：MySQL 建表- entity- mapper- mapper.xml- service- controller，按照这个顺序实现对一个目标的增删改查操作。 这个过程中，主要涉及 MySQL、MyBatis 以及 Spring Boot 的各种注解。 分页 Page 类封装了分页逻辑，包含当前页面 current、显示上限 limit、总行数 rows 和查询路径 path，除了自动生成的 get/set 方法，我们还需要加上一些对页的 get 操作实现了首页的分页功能。帖子的评论功能也是使用 Page 类来完成分页。 另外对于 Page 类，在 controller 中的方法调用前，SpringMVC 会自动实例化 Model 和 Page，并将 Page 注入 Model。之后，在 Thymeleaf 中就可以访问 Page 对象中的数据。 发送邮件 使用 Spring Email，需要在邮箱客户端启用 SMTP 服务，并在 application.properties 中添加邮箱的账户密码等配置信息。 使用到了 JavaMailSender 类发送邮件，并在用户注册时需要配合 Thymeleaf 的 TemplateEngine 类发送 HTML 激活邮件。 注册 UserService 类的 register() 中，需要进行账号&密码&邮箱非空的检查，还需要检查账号和邮箱未被注册，才能进行注册。 CommunityUtil 这个工具类中有生成随机字符串和 MD5 加密的方法，在数据库中只保存随机字符串 salt 和经过 MD5 加密的 password。特别注意密码不能直接存储到数据库中，以防万一被获取而造成用户隐私泄露！ CommunityConstant 常量接口包含了激活状态，这个状态用于判断用户注册后是否点击了激活邮件中的链接。 验证码 用到了 Kaptcha，在 KaptchaConfig 中配置图片、验证码和干扰信息。 在 LoginController 类的 getKaptcha() 中，传入 HttpSession 对象，将 String 类型的验证码存入 session，将图片输出给浏览器用于显示。后续需要验证时，再从 HttpSession 对象中取出验证码进行检查。注意这里在后文会使用 Redis 进行优化！ 登录 UserService 类的 login() 和 register() 在检查用户信息正确性的逻辑上类似，需要对账号进行非空","default_branch":null,"files":null,"tree":[],"storefront":"/r/windwj000","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/windwj000/community/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}