基于Springboot的社区开发项目

Community

​
本项目是个人独立开发的后端项目,这要涉及到Spring、SpringMVC、Mybatis的整合,以及SpringBoot去简化Spring的配置开发。
主要的技术点:
登录注册功能:使用kaptcha去生成验证码,使用邮件完成注册,Redis优化验证码的保存,解决分布式session问题
使用拦截器拦截用户请求,将用户信息绑定在ThreadLocal上
构建Trie数据结构,实现对发表帖子评论的敏感词过滤
支持对帖子评论,也支持对评论进行回复
利用AOP对service的业务代码实现日志记录
利用Redis的zset并结合Redis实现点赞关注的功能
点赞关注后的系统通知,实时性不需要特别高,使用kafka实现异步的发送系统通知
使用ElasticSearch实现对帖子的搜索功能,以及结果的高亮显示
SpringQuartz实现定时任务,完成热门帖子的分数计算模块
使用本地缓存Quartz缓存热门帖子优化热门帖子页面,提高了QPS(10 - 200)
 
• 评论:id user_id entity_type entity_id      target_id      content     status     create_time
        ○ user_id:评论作者;
        ○ entity_type:评论目标类型:1表示帖子,2表示评论 支持回复评论;
        ○ target_id 记录回复指向的人 (只会发生在回复中 判断target_id==0)
        ○ user_id 评论的作者
        ○ status:0存在,1表删除
        
• 私信:id  form_id      to_id conversion_id   content status  create_time
        ○ form_id : 发送者,其中from_id=1表示系统通知
        ○ To_id :收信人
        ○ Coversion_id:111_112(id小的在前)111与112 之间的会话。
        ○ status:0未读,1已读,2删除
• 帖子:id, user_id, title, content, type, status, create_time, comment_count, score
• 用户 user:id, username, password, salt, email, type, status, activation_code, header_url, create_time

img

​
1. 第一范式
确保数据表中每列(字段)的原子性。
2. 第二范式
在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关。
3. 第三范式
在第二范式的基础上更进一步,目标是确保表中的列都和主键直接相关,而不是间接相关。
例如:一个用户可以对应多个角色,一个角色也可以对应多个用户。则可以按如下方式建立数据表关系,使其满足第三范式。
​

 

项目准备

准备工作就是一些工作环境的配置,IDE使用IntellijIDEA,具体的框架的版本与配置,以及mysql,redis,kafka,es的安装与配置,视频里都会有详细的介绍,kafka,es在mac系统上的安装我也有写博客介绍,在此就不必再做详细的说明。下面介绍一些关于此项目的主要模块后端代码的实现部分。

注册与登录功能的实现

注册是登录功能是每个网站最基本的功能,实现的主要难点我觉得在于怎么解决分布式Session问题,密码安全问题,以及怎么优化登录的问题。

用户表实现

id username password salt email type
           

密码MD5加密

为了保证安全,密码不能明文的在网络中进行传输,也不能以明文的形式存到数据库中。 存在数据库的密码 = MD5( 密码 + salt ) 防止密码泄露

输入图片说明

输入图片说明

Session和Cookie的区别?
1、数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
​
2、安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
​
3、服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
​
4、数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
​
5、信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

 

Kaptcha生成验证码

Loginticket生成凭证 记录登录状态

本项目中先采用将用户登录信息存到数据库的login_ticket表中,后续采用存到redis中优化。

V1 将用户登录凭证ticket存到mysql的login_ticket表中

由于Http是无状态的,为了保证用户每次请求不用重新输入账号密码,

登陆成功的时候生成登录凭证,生成Loginticket往数据库login_ticket存,并且被设置为cookie,下次用户登录的时候会带上这个ticket,ticket是个随机的UUID

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值