Echo/docs/.vuepress/dist/assets/js/7.0bbea29c.js

1 line
66 KiB
JavaScript
Raw Normal View History

2021-02-11 21:31:41 +08:00
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{363:function(t,s,a){"use strict";a.r(s);var n=a(42),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"echo-开源社区系统"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#echo-开源社区系统"}},[t._v("#")]),t._v(" Echo — 开源社区系统")]),t._v(" "),a("hr"),t._v(" "),a("h2",{attrs:{id:"📚-从本项目你能学到什么"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#📚-从本项目你能学到什么"}},[t._v("#")]),t._v(" 📚 从本项目你能学到什么")]),t._v(" "),a("ul",[a("li",[t._v("学会主流的 Java Web 开发技术和框架")]),t._v(" "),a("li",[t._v("积累一个真实的 Web 项目开发经验")]),t._v(" "),a("li",[t._v("掌握本项目中涉及的常见面试题的答题策略")])]),t._v(" "),a("h2",{attrs:{id:"💻-核心技术栈"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#💻-核心技术栈"}},[t._v("#")]),t._v(" 💻 核心技术栈")]),t._v(" "),a("p",[t._v("后端:")]),t._v(" "),a("ul",[a("li",[t._v("Spring")]),t._v(" "),a("li",[t._v("Spring Boot 2.1.5 RELEASE")]),t._v(" "),a("li",[t._v("Spring MVC")]),t._v(" "),a("li",[t._v("ORMMyBatis")]),t._v(" "),a("li",[t._v("数据库MySQL 5.7")]),t._v(" "),a("li",[t._v("日志SLF4J日志接口 + Logback日志实现")]),t._v(" "),a("li",[t._v("分布式缓存Redis")]),t._v(" "),a("li",[t._v("本地缓存Caffeine")]),t._v(" "),a("li",[t._v("消息队列Kafka 2.13-2.7.0")]),t._v(" "),a("li",[t._v("搜索引擎Elasticsearch 6.4.3")]),t._v(" "),a("li",[t._v("安全Spring Security")]),t._v(" "),a("li",[t._v("邮件Spring Mail")]),t._v(" "),a("li",[t._v("分布式定时任务Spring Quartz")])]),t._v(" "),a("p",[t._v("前端:")]),t._v(" "),a("ul",[a("li",[t._v("Thymeleaf")]),t._v(" "),a("li",[t._v("Bootstrap 4.x")]),t._v(" "),a("li",[t._v("Jquery")]),t._v(" "),a("li",[t._v("Ajax")])]),t._v(" "),a("h2",{attrs:{id:"🔨-开发环境"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#🔨-开发环境"}},[t._v("#")]),t._v(" 🔨 开发环境")]),t._v(" "),a("ul",[a("li",[t._v("操作系统Windows 10")]),t._v(" "),a("li",[t._v("构建工具Apache Maven")]),t._v(" "),a("li",[t._v("集成开发工具Intellij IDEA")]),t._v(" "),a("li",[t._v("数据库MySQL 5.7")]),t._v(" "),a("li",[t._v("应用服务器Apache Tomcat")]),t._v(" "),a("li",[t._v("接口测试工具Postman")]),t._v(" "),a("li",[t._v("压力测试工具Apache JMeter")]),t._v(" "),a("li",[t._v("版本控制工具Git")])]),t._v(" "),a("h2",{attrs:{id:"🎨-功能列表"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#🎨-功能列表"}},[t._v("#")]),t._v(" 🎨 功能列表")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://gitee.com/veal98/images/raw/master/img/20210208222403.png",alt:""}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("[x] "),a("strong",[t._v("注册")])]),t._v(" "),a("ul",[a("li",[t._v("用户注册成功,将用户信息存入 MySQL但此时该用户状态为未激活")]),t._v(" "),a("li",[t._v("向用户发送激活邮件用户点击链接则激活账号Spring Mail")])])]),t._v(" "),a("li",[a("p",[t._v("[x] "),a("strong",[t._v("登录 | 登出")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("进入登录界面,动态生成验证码,并将验证码短暂存入 Redis60 秒)")])]),t._v(" "),a("li",[a("p",[t._v("用户登录成功(验证用户名、密码、验证码),生成登录凭证且设置状态为有效,并将登录凭证存入 Redis")]),t._v(" "),a("p",[t._v("注意:登录凭证存在有效期,在所有的请求执行之前,都会检查凭证是否有效和是否过期,只要该用户的凭证有效并在有效期时间内,本次请求就会一直持有该用户信息(使用 ThreadLocal 持有用户信息)")])]),t._v(" "),a("li",[a("p",[t._v("勾选记住我,则延长登录凭证有效时间")])]),t._v(" "),a("li",[a("p",[t._v("用户登录成功将用户信息<EFBFBD><EFBFBD>