概述
本部分内容
这部分主要是从客户端输入网址到登录成功
进入主页
一般来说,输入的网址会被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 |
总结
至此登录的流程已经到头了,不知道各位看官到底看没看懂呢?基本上事无巨细都给讲解了一遍,大家共同进步!在这里插入代码片
最后
以上就是自信大米为你收集整理的一个秒杀系统的登录系统到底是怎么工作的本部分内容进入主页点击登录后端捕获1.LoginController2.UserService.login()3.MiaoshaUser.getByNickName4.RedisService.get5.UserService.addCookie总结的全部内容,希望文章能够帮你解决一个秒杀系统的登录系统到底是怎么工作的本部分内容进入主页点击登录后端捕获1.LoginController2.UserService.login()3.MiaoshaUser.getByNickName4.RedisService.get5.UserService.addCookie总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复