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返回给前端当前登录用户的信息





1892

被折叠的 条评论
为什么被折叠?



