基于Session实现登录

cookie中包含session的id

在Web应用中,Session(会话)是服务器端存储的用户临时数据,而Session中存储的具体内容取决于应用需求。

发送短信验证码:保存验证码到session中,当用户提交验证码时,前端通过HTTP请求将验证码发送到后端,后端再与Session/Redis中存储的验证码进行比对验证。

登录校验:后续操作一定会用到当前登录用户的信息,所以将信息存储在ThreadLocal中,如果将信息存储在一个本地变量中,可能会出现多线程并发修改的问题,而ThreadLocal会在线程内部创建一个Map去存储信息,所以每个用户之间都有独立的空间,避免了干扰

实现发送短信功能

 

控制层:需要将信息验证码保存在session中

业务层: 接受前端发回来的手机号,根据正则表达式的方法判断当前手机号是否符合规范,如果不符合规范,返回错误信息,反之利用RandomUtils的randomNumber(N)生成一个 N位的验证码,并把验证码存入session中,用于用于的第一次登录校验验证码是否正确,然后将验证码返回给前端

 

实现短信验证码的登录和注册功能

前端携带手机号和验证码到后端

业务层:需要将用户信息存储在session中,与此同时需要session来做登录校验

UserServiceImpl 继承了 ServiceImp 类,这个类是mybatis-plus提供的辅助单表查询的类

UserInfoMapper继承了BaseMapper<UserInfo>里面包含各种Mapper层需要用到的方法

@ TableName("tb_user") 表明要操作的是哪一个表

业务层:在第一次登录的时候,前端会携带DTO包括用户的手机号和验证码和密码,所以需要对手机号先进行判断,如果手机号错误的话,直接返回错误信息(我认为但是这里其实并没真正的判断手机号,而是单单的判断传来的手机号是否符合手机号的标准格式),如果手机号符合标准,接下来判断验证码是否正确,从DTO中取出验证码,从session中取出验证码,判断传入的验证码是否为空或者不为获取的验证码,如果比对成功,利用mybatis-plus实现根据手机号查询用户,如果查询不到用户,转到自动注册界面,自动注册用户只需要设置一下用户的手机号和用户名(随机生成),然后将新用户的数据插入到user表中,最后一步将user用户信息存入session中,作为后续登录校验的工具

 

实现登录校验拦截器

在拦截器中拦截之后需要想办法将用户数据传输给Controller,并且要保证线程安全——方法:ThreadLocal

业务逻辑:前端发起请求会携带cookie,cookie中保存着唯一的sessionId, 服务端拦截器对像根据sessionid取出对应的session,然后将session传到controller中,判断数据库中是否有当前用户,如果没有当前用户,返回false,如果存在当前用户就把当前用户信息保存到ThreadLocal中以便有序操作中用到用户信息,然后controller将当前登录用户的信息返回给前端

Ctrl+I 快速实现接口中的方法

拦截器:

配置拦截器:

Controller返回给前端当前登录用户的信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值