我是靠谱客的博主 自信大米,最近开发中收集的这篇文章主要介绍一个秒杀系统的登录系统到底是怎么工作的本部分内容进入主页点击登录后端捕获1.LoginController2.UserService.login()3.MiaoshaUser.getByNickName4.RedisService.get5.UserService.addCookie总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本部分内容

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

进入主页

一般来说,输入的网址会被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

行数作用
65prefix是过期时间+“nickname”
66-68从jedisPool中获取资源
70由"nickname"+传入的key得到真的key
71由真的key获取到redis中的value
72由字符串转换为实体类
73-75try中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总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部