发布时间:2023-10-27 09:00
前端获取到token,就算成功,后面前端的所有请求都会被后端拦截,判断是否token有效,并且在有效期内
关于短信验证码,已经在我的另一篇博客中了。传送门
实体类
package com.example.etf.story.paramer;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class NetInfoParam {//浏览器的相关信息,用户发送短信的时候用到
private String ipNum;//用户ip
private String phone;//他发送的手机号
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private Date updateTime;
private String country;
private String region;//区域
private String city;//城市
private String status;//1为正常,2为封ip
private String code;//验证码
}
controller中的方法
@PostMapping("/signOrRegister")
@ResponseBody
public R signOrRegister(@RequestBody NetInfoParam netInfoParam, HttpServletRequest request){
if(!clientService.isMobile(netInfoParam.getPhone())){
return failed("请输入正确的手机号");
}
//判断库中验证码是否正确,并且没有超时
NetInfoParam phoneCode = clientService.selectPhoneByCode(netInfoParam);
if(phoneCode==null){
return failed("验证码不匹配,或者验证码失效,请重新尝试");
}
//注册或登录
//判断是否存在此手机号,不存在,则注册
UserInfoParam userInfoParam = clientService.selectUserByPhone(netInfoParam.getPhone());
if(userInfoParam==null){
netInfoParam.setCreateTime(new Date());
//调用注册
clientService.insertUserInfo(netInfoParam);
}
//登录,获取用户基本信息
userInfoParam = clientService.selectUserByPhone(netInfoParam.getPhone());
//创建token
String token = TokenUtils.token(userInfoParam.getPhone());
//安全方面
//phone从token中取,这样能防止,用户用自己的token去删除别人的信息
//由于手机号绑定验证码,用户没法获取其他人的token
userInfoParam.setToken(token);
return ok(userInfoParam);
}
service方法
public NetInfoParam selectPhoneByCode(NetInfoParam netInfoParam){
TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
//查询验证码是否过期,并且是否存在此验证码匹配的手机
return mapper.selectPhoneByCode(netInfoParam);
}
public UserInfoParam selectUserByPhone(String phone){
TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
//查询此手机号是否注册过用户
return mapper.selectUserByPhone(phone);
}
//注册
public int insertUserInfo(NetInfoParam netInfoParam){
TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
return mapper.insertUserInfo(netInfoParam);
}
mapper.xml
NetInfoParam selectPhoneByCode(NetInfoParam netInfoParam);
//判断是否注册,顺便获取用户user表基本信息
UserInfoParam selectUserByPhone(String phone);
//注册通过手机号
int insertUserInfo(NetInfoParam netInfoParam);
sql.xml
insert INTO `test_user`(user_name,create_time,phone)
VALUES(#{phone},#{createTime},#{phone})
关于token中的方法,传送门
从零开始搭建Kubernetes集群(七、如何监控K8S集群日志)
持续集成工具集之四 Jenkins+Maven+Git+Tomcat 项目构建和自动部署
STM32F1+BC20+MQTT+FreeRTOS系统连接云平台传输温湿度,控制LED灯③——华为云
html中el日期格式化,【CSS】element-ui中的el-date-picker组件中某一日期上方多渲染一个字?...
工业自动化要学python_翻译:对测试自动化来说,为什么说Python是非常好的(选择)WHY PYTHON IS GREAT FOR TEST AUTOMATION...
Datenlord | Rust 语言无锁数据结构的内存管理