From cdbaed22d9abf54dc636daa82439766c78e7edf1 Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 16:38:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/SliderImageController.java | 5 ++-- .../common/aop/limiter/LimitInterceptor.java | 27 +++++++------------ .../java/cn/lili/common/enums/ResultCode.java | 2 ++ .../serviceimpl/GoodsSkuServiceImpl.java | 4 +++ 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java b/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java index cae8d3ef..ff8dbef5 100644 --- a/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java +++ b/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java @@ -1,6 +1,7 @@ package cn.lili.controller.common; import cn.lili.common.aop.limiter.annotation.LimitPoint; +import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.enums.ResultUtil; import cn.lili.common.verification.enums.VerificationEnums; @@ -37,8 +38,8 @@ public class SliderImageController { } catch (ServiceException e) { throw e; } catch (Exception e) { - log.error("获取校验接口错误",e); - return null; + log.error("获取校验接口错误", e); + throw new ServiceException(ResultCode.VERIFICATION_EXIST); } } diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index fd779456..ff0b5210 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -5,10 +5,8 @@ import cn.lili.common.exception.ServiceException; import com.google.common.collect.ImmutableList; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; +import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; @@ -18,7 +16,6 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; -import java.lang.reflect.Method; /** * 流量拦截 @@ -43,40 +40,34 @@ public class LimitInterceptor { this.limitScript = limitScript; } - @Around("execution(public * *(..)) && @annotation(cn.lili.common.aop.limiter.annotation.LimitPoint)") - public Object interceptor(ProceedingJoinPoint pjp) throws Throwable { - MethodSignature signature = (MethodSignature) pjp.getSignature(); - Method method = signature.getMethod(); - LimitPoint limitPointAnnotation = method.getAnnotation(LimitPoint.class); + @Before("@annotation(limitPointAnnotation)") + public void interceptor(LimitPoint limitPointAnnotation) { LimitType limitType = limitPointAnnotation.limitType(); String name = limitPointAnnotation.name(); String key; int limitPeriod = limitPointAnnotation.period(); int limitCount = limitPointAnnotation.limit(); switch (limitType) { - case IP: - key = limitPointAnnotation.key() + getIpAddress(); - break; case CUSTOMER: key = limitPointAnnotation.key(); break; default: - key = StringUtils.upperCase(method.getName()); + key = limitPointAnnotation.key() + getIpAddress(); } ImmutableList keys = ImmutableList.of(StringUtils.join(limitPointAnnotation.prefix(), key)); try { Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod); - log.info("Access try count is {} for name={} and key = {}", count, name, key); + log.info("限制请求{}, 当前请求{},缓存key{}", limitCount, count.intValue(), key); //如果缓存里没有值,或者他的值小于限制频率 - if (count.intValue() <= limitCount) { - return pjp.proceed(); - } else { + if (count.intValue() >= limitCount) { throw new ServiceException("访问过于频繁,请稍后再试"); } } //如果从redis中执行都值判定为空,则这里跳过 catch (NullPointerException e) { - return pjp.proceed(); + return; + } catch (ServiceException e) { + throw e; } catch (Exception e) { throw new RuntimeException("服务器异常,请稍后再试"); } diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index d6e4b16b..677ea0f6 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -34,6 +34,7 @@ public enum ResultCode { */ WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"), + VERIFICATION_EXIST(1002, "验证码服务异常"), /** * 分类 */ @@ -56,6 +57,7 @@ public enum ResultCode { GOODS_UPPER_ERROR(11004, "商品上架失败"), GOODS_AUTH_ERROR(11005, "商品审核失败"), POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"), + GOODS_SKU_ERROR(11007, "SKU信息均为必填项,不能为空"), /** * 参数 diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index 57613d4c..0a4c2694 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.common.cache.Cache; +import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.common.rocketmq.tags.GoodsTagsEnum; @@ -603,6 +604,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i for (Map.Entry m : map.entrySet()) { //保存规格信息 if (m.getKey().equals("id") || m.getKey().equals("sn") || m.getKey().equals("cost") || m.getKey().equals("price") || m.getKey().equals("quantity") || m.getKey().equals("weight")) { + if (null == m.getValue()) { + throw new ServiceException(ResultCode.GOODS_SKU_ERROR); + } continue; } else { specMap.put(m.getKey(), m.getValue());