一个关于校验优惠券是否可以领取的问题
来源:9-15 用户领取优惠券

LBruce
2019-10-30
贴上老师的代码:
if (templateId2Coupons.containsKey(request.getTemplateSDK().getId())
&& templateId2Coupons.get(request.getTemplateSDK().getId()).size()
>= request.getTemplateSDK().getRule().getLimitation()) {
log.error("Exceed Template Assign Limitation:{}",
request.getTemplateSDK().getId());
throw new CouponException("Exceed Template Assign Limitation");
}
在判断limitation的时候,不应该拿request的limitation字段去做判断,因为request是请求参数,是有可能伪造的。比如说新建了一个优惠券模板1,limitation为1,即每个用户仅限领取1张。但是在领取优惠券的时候,request中的limitation却是100,那这样的话,就会出现用户能够领取不止1张模板1的优惠券这种错误情况。
templateId2Coupons.get(request.getTemplateSDK().getId()).size()
>= request.getTemplateSDK().getRule().getLimitation()
应该改成如下图所示,因为idsTemplate是从数据库中查找出来的,limitation是可靠的。
templateId2Coupons.get(request.getTemplateSDK().getId()).size()
>= id2Template.get(request.getTemplateSDK().getId()).getRule().getLimitation()
写回答
1回答
-
同学你好:
你这里提出的问题是正确的。确实是不应该相信任何外部传递的参数直接去使用,这里也是我在课程中留下的一个问题,将来我会在课程更新的时候说明并解决。
感谢同学的认真学习,思考的问题非常到位。
欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!
312019-10-31
相似问题