一个秒杀系统的登录系统到底是怎么工作的

本部分内容

这部分主要是从客户端输入网址到登录成功

进入主页

一般来说,输入的网址会被controller层拦截,但是如果在只输入了主机,没有输入其他的内容那么就会默认载入template中的index.html网页

点击登录

点击登录之后,浏览器构造请求体,发送给服务器,服务器进行解析

这里本来有前端代码,templates/index.html,奈何鄙人能力有限,对前端知之甚少,40行为何就登录了实在是丈二和尚摸不着头,往大佬们不吝赐教。

后端捕获

src/main/java/com/geekq/miaosha/controller/LoginController.java捕获到了登录请求,然后进行处理,接下来就是一行一行的谈一谈这几句话

行数 作用
40 注解,匹配的请求
41 注解,有返回体
42 返回值,状态码,输入值请求体,表单内容
43 创建状态码(默认为成功)
44 日志中写入表单内容
45 调用userService进行登录
46 返回状态码

1.LoginController

@RequestMapping

首先说什么是Spring MVC,MVC是Model View Controller缩写

model是模型,在这儿就是Java相关的实体类

view是视图,在这儿是渲染出来的html网页

controller是控制器,在这儿是捕获请求之后进行处理的模块

那Spring MVC到底是怎么个工作流程

看图说话,服务器接收请求,请求进来了,由前端控制器接收,接收之后根据URL的内容,由分发器分发给其他的控制器,这个控制器处理请求,创建model返回给前端控制器,前端控制器从template文件夹中选取模板,进行渲染,返回给前端控制器,前端控制器向客户端返回response

requestmapping就是我们前端控制器分发给的控制器,怎么判断分发给谁呢,就是在requestmapping后面添加内容,URL去掉前缀,也就是主机,与requestmapping中的value值进行正则匹配,如果能够匹配上,就由该控制器匹配到的函数处理分发来的请求。

@ResponseBody

这个注解的作用是将这个函数对应返回值反序列化为JSON对象,并添加到HttpResponse对象中

ResultGeekQ

封装的一个返回结果类

dologin

这是个自己定的函数名,具体执行哪个函数由@RequestMapping value指定,跟这个函数名无关

@valid

是用来检验Bean的,检验发送方发送的数据是否有效,比如是不是为null,或者一些自定义的验证规则之类的

loginVo

是一个视图类实体,存储的是客户端传过来的用户名和密码

Logger

日之类。给日志里面写入用户名和密码。

2.UserService.login()

接着下沉到45行所在的服务层的登录函数,看看一看登录的逻辑

行数 作用
131-133 如果是空就抛出系统错误异常(前端没检测到)
133-135 获取账号密码
136-145 由电话号码获取用户,redis没有就直接查数据库,如果没有电话或者密码不对就抛出异常
147-148 向response中添加token用于后续免密码登录

throw

终止运行后面的代码,直到有catch捕获了这个异常

MD5Utils.FormPassToDBPass

将密码和盐混合进行加密

Token

这儿是生成一个随机数用来当令牌,用以识别是不是同一个用户

addCookie

将cookie加入response,将token放到redis上

3.MiaoshaUser.getByNickName

行数 作用
60-63 从redis获取用户,不为空则返回
65-69 从数据库获取用户,不为空则返回

4.RedisService.get

行数 作用
65 prefix是过期时间+“nickname”
66-68 从jedisPool中获取资源
70 由"nickname"+传入的key得到真的key
71 由真的key获取到redis中的value
72 由字符串转换为实体类
73-75 try中return并不会真的return 而是在finally执行完了才return

redis能存储的数据有以下五种

一般来说都是存储的字符串

5.UserService.addCookie

行数 作用
179 将“tk”+token作为key存入redis当做session
180 新建cookie创建token字段
181 设置cookie的最大过期时间
182 设置cookie的路径
183 将cookie加入response

总结

至此登录的流程已经到头了,不知道各位看官到底看没看懂呢?基本上事无巨细都给讲解了一遍,大家共同进步!在这里插入代码片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章