项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
15| 高并发下账号唯一性及解密过程
2024-08-05
·
·
原创
·
·
本文共 151个字,预计阅读需要 1分钟。
### 高并发下账号唯一性安全保证方案 **同个时刻注册,需要保证账号在数据库里唯一** - Redis:先看redis是否有,然后没的话则是新的注册 - key -value 存储, 配置60秒过期 - 非原子性操作,存在不一致 - 数据库唯一索引(建表的时间已经添加) ```sql ALTER TABLE user ADD unique(`mail`) ``` ### 登录解密过程 核心逻辑 - 通过mail找数据库记录 - 获取盐,和当前传递的密码就行加密后匹配 - 生成token令牌 ```java // 请求参数对象 @Data @ApiModel(value = "登录对象",description = "用户登录请求对象") public class UserLoginRequest { @ApiModelProperty(value = "邮箱", example = "794666918@qq.com") private String mail; @ApiModelProperty(value = "密码", example = "123456") private String pwd; } // 控制器 @ApiOperation("用户登录") @PostMapping("login") public JsonData login(@ApiParam("用户登录对象") @RequestBody UserLoginRequest userLoginRequest){ return userService.login(userLoginRequest); } // 解密逻辑 @Override public JsonData login(UserLoginRequest loginRequest) { List
list = userMapper.selectList( new QueryWrapper
().eq("mail", loginRequest.getMail())); if (list != null && list.size() == 1) { UserDO userDO = list.get(0); String cryptPwd = Md5Crypt.md5Crypt(loginRequest.getPwd().getBytes(), userDO.getSecret()); if (cryptPwd.equals(userDO.getPwd())) { //生成token令牌 return JsonData.buildSuccess(); } //密码错误 return JsonData.buildResult(BizCodeEnum.ACCOUNT_PWD_ERROR); } else { //未注册 return JsonData.buildResult(BizCodeEnum.ACCOUNT_UNREGISTER); } } ```