微信后台订阅管理系统总结

登录模块

登录接口

从redis中根据手机号获得缓存的验证码
短信验证码校验
图片验证码校验验证码
通过后 删除缓存中的获取的验证码
进行密码的校验

密码校验的过程

通过手机号查找到SQL中存的密码
通过参数 进行RSA解密,得到参数密码
如果以上两密码相同

进入第一次登录逻辑,首次登录 获取用户基本信息Userlog

用户信息转换成map
根据id生成一个字符串token,
Map中添加键值对 键是“userToken”值是刚刚生成的字符串
在redis中添加 键id和 值token 设置15分钟
在redis中添加 键token和 值map(map中是用户信息和userToken) 设置15分钟

userlog中设置登录时间,登录ip
写入数据库
响应体设置头 (权限,token)
返回 map

如果不相等 将数据库得到的密码进行盐哈希解密,与参数对比
一致则获取用户的上次登录信息,非第一次登录

进入第二次登录逻辑

获取用户上次登录的id,时间 ip等
转换成map
根据id生成一个字符串token,
Map中添加键值对 键是“userToken”值是刚刚生成的字符串
在redis中添加 键id和 值token 设置15分钟
在redis中添加 键token和 值map(map中是用户上次信息和userToken) 设置15分钟

userlog中设置登录时间,登录ip
写入数据库
响应体设置头 (权限,token)
返回 map

校验成功 登录成功

密码修改接口

首先检查新密码格式是否正确,具体实现方式为调用格式检查接口
String pattern = “(?=.*[a-z])(?=.*\d)(?=.*[#?!@$%^&*-\.\[\]\*])[A-Za-z\d`#?!@$%&-\.\[\]\]{8,20}”;
Pattern r = Pattern.compile(pattern);
将给定的正则表达式 编译并赋予给Pattern类。然后使用macher方法返回一个Matcher类
Matcher m = r.matcher(newPassword);
return m.matches();//返回一个布尔值
然后检查手机号或者旧密码输入是否为空
//获取DB中密码
String passworFromDb = loginMapper.findUserByPhone(phone);
String oldPassword = “”;
String hashNewPws = HmacSha256Util.hmacSHA256(HmacSha256Util.getAppSecret(), newPassword);
//根据账号状态进行修改密码
String token = request.getHeader(“Authorization”);
Integer status = (Integer) redisUtil.hGet(token, “userStatus”);
if (status == 0) {//未改过密码
if(!password.equals(passworFromDb))
throw new BusinessException(“旧密码不对”);
loginMapper.passwordChange(hashNewPws, phone);
loginMapper.updateStatus(phone);
redisUtil.hPut(token, “userStatus”, 1);
}
第一次修改 不需要验证过去五次是否一样,但是要修改账号密码状态
else{//改过密码
oldPassword = HmacSha256Util.hmacSHA256(HmacSha256Util.getAppSecret(), password);
if (!oldPassword.equals(passworFromDb))
throw new BusinessException(“旧密码不对”);
//通过验证,开始修改操作 取最近5次
List list = loginMapper.checkPassword(phone);
System.out.println(list);
for (String pasw : list) {
if (hashNewPws.equals(pasw))
throw new BusinessException(“密码与近五次密码有重复”, new Error());
}
loginMapper.passwordChange(hashNewPws, phone);
}
return Result.success();

过滤器

网关上设置全局过滤器
设置登录,发送验证码等接口为白名单,不需要经过过滤器
其余接口被调用前必须经过验证
验证方式为 从header 获取到token,与redis中的token(通过useid获得)进行对比
相同之后 进行ip等相关条件的比对(前端发来的header)

粉丝管理模块

加入分组功能
//将规则及粉丝数量计入分组
fansQueryMapper.tagBindingRule(fansQueryDto);
// 加入任务列表
String uuid = “tagTask” + UUID.randomUUID().toString().substring(0, 8);
String token = request.getHeader(“Authorization”);
String createdBy = redisUtil.hGet(token, “userName”).toString();
taskMapper.addTagTask(uuid, createdBy, fansQueryDto.getTagId());
//统计结果
String status = “已完成”;
String result = “全部成功”;
taskMapper.updateTaskStatus(uuid,status, result);

分组管理模块

累加所有分组得到总分组数

先进行分页逻辑
参数是 每页显示数量 和显示第几页
根据以上两个参数和总数 可以算出 当前查的第一个元素位置
然后进行查询

    // 取总记录数,自定义记录数,规则记录数
    Page<FansGroup> page = subGroupMapper.queryGroupFromDB();
    // 取总页码
    Integer totalPage = page.getPageTotal() / pageSize;
    if (page.getPageTotal() % pageSize > 0) {
        totalPage += 1;
    }

    // 设置总页数,清空多余数据
    page.setTotalPage(totalPage);
    page.setPageTotal(null);

    //设置显示数量
    pageSize = Math.min(pageSize, 10);
    // 设置当前页码,求当前页数据的开始索引
    int begin = (pageNo - 1) * pageSize;
    // 设置当前页数据
    List<FansGroup> items = subGroupMapper.queryForPageItems(begin, pageSize);
    // 设置当前页数据
    page.setTagList(items);

    String jsonString = JSON.toJSONString(page);
    Map map = JSON.parseObject(jsonString, Map.class);
    return map;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值