本项目非原创,我也只是作为一名初学者跟着成熟的up主一起敲代码而已。视频来源于:

Springboot项目实战 easypan 仿百度网盘 计算机毕业设计 简历项目 项目经验(后端)_哔哩哔哩_bilibili Springboot项目实战 easypan 仿百度网盘 计算机毕业设计 简历项目 项目经验(后端)共计28条视频,包括:项目简介、项目架构、环境配置等,UP主更多精彩视频,请关注UP账号。 icon-default.png?t=N7T8 https://www.bilibili.com/video/BV1qV4y1d7zY

在哔哩哔哩闲逛看到这个项目,感觉还不错,于是想要学习一下这个项目怎么写。项目日记也会同步更新。(本人不分享本项目源码,支持项目付费)

本项目大量采用了先前项目中已经写好的代码,而且UP主讲的也很快。因此不适合新手作为自己的第一个项目。

今日完结任务:

1.完成了注册接口

再讲整个业务逻辑之前,我们要先引入一下AOP。在这个接口中我们用到了AOP。原因是因为:在用户登录这块,有大量的参数需要做非空校验以及其他校验, 因此我们就顺势去做一个切面。

核心思路为: 通过 注解 的方式 标记方法 ,利用AOP思想创建一个切面,在切面中实现对标记方式中字段的填充,然后再运行原方法。这样就实现了在 不改动原方法 的前提下,实现了对代码的优化升级。

创建AOP切面:

创建 注解GlobalInerceptor 来标识需要对哪些方法进行拦截参数校验

创建 注解VerifyParam 来标识需要对哪些参数进行校验以及校验什么内容

开始写切面,完成切入点表达式来精准拦截方法,这里写了很多校验代码,我就不一一贴出来了。

讲完了这个AOP之后,我们再回到业务层,看一看注册接口:

业务逻辑:

Controller层先对传入的图片验证码进行了校验,通过之后再进入注册界面。 需要注意的是:无论本次注册是否成功,这次用到的验证码都应该废弃,所以我们try finally语句。在finally部分使用session的removeAttribute方法来删除掉会话中的验证码。

接下来让我们看一看servel层的具体实现:

这里先使用select查询当前邮箱是否已经被注册过。之后校验邮箱验证码,校验成功之后生成userInfo对象写入用户表中。需要注意的是我们不明文存储用户密码,而是存储MD5加密后的密码。 在比较的时候,我们也是用用户输入的密码的MD5加密字符与数据库中用户真正密码的MD5加密字符进行对比

2.完成了登录接口:

登录接口的Controller层还是和注册接口一样: 判断验证码是否正确并且销毁验证吗,最后进入severl层执行真正逻辑

所以我们现在转到Server层来看一看业务逻辑:

整个登录就接口一共就五个板块:

  1. 校验用户密码和用户状态
  2. 更新用户最后一次登录时间
  3. 将当前用户状态写入session
  4. 判断当前用户是否为管理员
  5. 更新当前用户已经使用内存的空间

这里在比较密码的时候,直接就用传递到后端的密码和数据库中MD5加密后的字符串 。这是因为我们的密码在前端就已经进行MD5加密了,发送的并不是明文密码,而是MD5加密。

杂项知识点:

今天记录一下之前一直没有看懂的一个类:

配置中心类,主要存储发送验证码邮件的模板 以及 个人网盘的各种配置,比如已经使用空间大小。

之前一直错误(shabi)以为这是一个写入Redis的类,也不知道咋想的,哎,因为这个小问题导致我写项目一直难受,服了。

感觉今天的收获就是: 看代码已经不能急躁,不能先入为主。不然很容易造成错误,今天算是亲自领略到了。要沉下心来仔细看一看代码,不要急躁,不要急躁!

今天还不错,学到了很多。最大的领悟就是: 看代码的时候不要急躁,不要急躁,不要急躁,不要急躁!

如果我的内容对你有帮助,请 点赞,评论,收藏 。创作不易,大家的支持就是我坚持下去的动力!

欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体...
文章目录请求字段自定义 校验 一、自定义 校验 类二、定义 切面 拦截请求,对controller中的save方法,进行 参数 校验 三、自定义异常以及异常捕获四、实体类添加 校验 五、测试 请求字段自定义 校验 一、自定义 校验 类 为 实现 对输入字节长度的 校验 ,定义ByteLength 校验 接口,在ByteLengthValidatorImpl中通过isValid()方法 实现 对字节长度的 校验 。 自定义 校验 类的 实现 代码如下,下...
在项目中,我们会对入参做 校验 ,这些 参数 校验 逻辑我们会写很多次.能不能将这些 参数 校验 逻辑提出来呢?答案是可以.Spring 有自己的validate工具方法,我个人感觉不是太好远,想自己定制更加契合自己项目的 校验 机制.经过哆哆嗦嗦的研究,有点结果,现在贴出来,大家一起看看!        我曾经写过一个工具类,就是会在Service层的方法上加上自定义的注解,利用Spring aop 拦截标注注
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface StoreIdValid ... AOP (Aspect-Oriented Programming,面向 切面 编程):是一种新的方法,是对传统OOP(Programming,面向对象编程)的补充 AOP 的主要编程对象是 切面 (asspect),而 切面 模块化横切关注点。 在应用 AOP 编程时,仍需要定义公共功能,但可以明确的定义这个功能在哪里,以什么方式应用,并且不必修改受影响的类,这样一来横切关注点...
AOP 简单说明: AOP 为Aspect Oriented Programming的缩写,意为:面向 切面 编程,通过预编译方式和运行期动态代理 实现 程序功能的统一维护的一种技术。在日常 开发 当中经常用来记录日志,方法跟踪、事务,权限等 切面 方法说明: @Aspect -- 作用是把当前类标识为一个 切面 供容器读取 @Pointcut -- (切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达...
import org.apache.commons.lang3.exception.ExceptionUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; impo... answer: spring mvc 默认自带的 校验 机制 @Valid + BindingResult, 但这种默认 实现 都得在Controller方法的中去接收BindingResult,从而进行 校验 . if (result.hasErrors()) { List allErrors = result.get