webapi控制器怎么接收json_一个秒杀系统的登录系统到底是怎么工作的

00e8927b30c98827a2961959bf7d118b.png

本部分内容

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

进入主页

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

c4cc14446a8dd08a848cc59eeae5e108.png

点击登录

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

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

f28c9e055b8f4e547e770a51146fc06c.png

后端捕获

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

fb9f075c9402211f147de47f335d5826.png

行数作用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

7b1d8629029a5485e86c8c94c0e61769.png

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

@ResponseBody

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

ResultGeekQ

封装的一个返回结果类

dologin

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

@valid

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

loginVo

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

Logger

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

2.UserService.login()

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

9e541bd170e826f2960d0457fbdf3458.png

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

throw

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

MD5Utils.FormPassToDBPass

将密码和盐混合进行加密

Token

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

addCookie

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

3.MiaoshaUser.getByNickName

41d9c7298eed6389573c569a29d864fc.png

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

4.RedisService.get

176703de14244065ccdb8d281c32f4a8.png

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

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

62a22efa8aec60005022ece7acd50a4d.png

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

5.UserService.addCookie

64cdd76c2f8856c7624df51a27d30b3e.png

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

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值