06小节:开发优惠券增加发行量等功能
作者:程序员马丁
note
热门项目实战社群,收获国内众多知名公司面试青睐,近千名同学面试成功!助力你在校招或社招上拿个offer。
开发优惠券模板结束、增加发行量等功能,元数据信息:
- 什么是牛券oneCoupon:https://t.zsxq.com/pAWgS
- 代码仓库:https://gitcode.net/nageoffer/onecoupon —— 申请项目权限参考上述牛券项目链接
- 章节难度:★★☆☆☆ - 中等
- 视频地址:文档先行视频次之
©版权所有 - 拿个offer-开源&项目实战星球专属学习项目,依据《中华人民共和国著作权法实施条例》和《知识星球产权保护》,严禁未经本项目原作者明确书面授权擅自分享至 GitHub、Gitee 等任何开放平台。违者将面临法律追究。
内容摘要:在之前的章节中我们把核心的优惠券模板创建接口讲解完了,本章节完成优惠券模板相关的其他接口:分页查询优惠券模板、查询优惠券模板详情、增加优惠券模板发行量以及结束优惠券模板。
课程目录如下所示:
- 业务背景
- Git 分支
- 数据横线越权
- 判断极端情况
- 增加发行量是否存在数据错乱?
- 实验 MySQL 行排他锁
业务背景
优惠券创建后,针对商家用户对优惠券的查看和管理相关需求,我们开发四个相关联接口:
- 分页查询优惠券模板。
- 查询优惠券模板详情。
- 增加优惠券模板发行量。
- 结束优惠券模板。
活动图如下所示:
Git 分支
20240818_dev_other-coupon-template_feature_ding.ma
数据横向越权
数据横向越权是一种安全漏洞类型,指的是在系统中,用户能够访问或操作本不属于他们的数据或资源的行为。这种漏洞通常发生在权限检查不严谨或未能正确隔离用户数据的情况下。具体来说,横向越权允许用户访问其他用户的数据。
举个例子:张三创建了一张优惠券,ID 是 Z1,李四知道了这个优惠券 ID,调用停止优惠券接口或者增加发行量接口等使坏。
以结束优惠券接口举例,我们在代码中验证当前优惠券是否登录用户的店铺,如果不是的话返回异常。
@LogRecord(
success = "结束优惠券",
type = "CouponTemplate",
bizNo = "{{#couponTemplateId}}"
)
@Override
public void terminateCouponTemplate(String couponTemplateId) {
// 验证是否存在数据横向越权
LambdaQueryWrapper<CouponTemplateDO> queryWrapper = Wrappers.lambdaQuery(CouponTemplateDO.class)
.eq(CouponTemplateDO::getShopNumber, UserContext.getShopNumber())
.eq(CouponTemplateDO::getId, couponTemplateId);
CouponTemplateDO couponTemplateDO = couponTemplateMapper.selectOne(queryWrapper);
if (couponTemplateDO == null) {
// 一旦查询优惠券不存在,基本可判定横向越权,可上报该异常行为,次数多了后执行封号等处理
throw new ClientException("优惠券模板异常,请检查操作是否正确...");
}
// ......
}