From 389692b0e284b17b0768f88f6e0e68b18ad42ecb Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Thu, 17 Aug 2023 19:03:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0detail=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/nanopart/api/constant/NanopartConstant.java | 2 ++ .../axzo/nanopart/api/request/BlackAndWhiteListReq.java | 9 +++++++++ .../dao/repository/BlackAndWhiteListRepository.java | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java index d7245dd4..bd12bdf2 100644 --- a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/NanopartConstant.java @@ -8,5 +8,7 @@ package cn.axzo.nanopart.api.constant; * @version: 1.0 */ public class NanopartConstant { + + public static final String BASIC_FEIGN_PACKAGE = "cn.axzo.nanopart.api"; public static final String PHONE_REGEXP = "^1[3456789]\\d{9}$"; } \ No newline at end of file diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListReq.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListReq.java index 4ef71002..1b2e0b8e 100644 --- a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListReq.java +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListReq.java @@ -17,11 +17,20 @@ import java.util.Map; @Data public class BlackAndWhiteListReq { + /** + * 名单类型,0为黑名单,1为白名单 + */ @NotNull(message = "名单类型错误") private ListTypeEnum type; + /** + * 模块名,自主定义,例:cms-login + */ @NotBlank(message = "模块名不能为空") private String module; + /** + * 限制条件,如:phone:13698745673 + */ private Map param; } diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java index 0b161857..1bfbeddf 100644 --- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java @@ -59,7 +59,8 @@ public class BlackAndWhiteListRepository extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type",req.getType().getValue()) .eq(StringUtils.isNotBlank(req.getModule()),"module",req.getModule()) - .eq("is_delete",0); + .eq("is_delete",0) + .groupBy("type","param"); buildQueryWrapper(queryWrapper, req.getParam(), ""); return blackAndWhiteListMapper.selectList(queryWrapper); } From cfb4e62c132d50c4bb97d15b5d48cd3d075785ac Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Thu, 17 Aug 2023 19:06:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0spring.factories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nanopart/api/config/MaoKaiApiAutoConfiguration.java | 9 +++++++++ .../src/main/resources/META-INF/spring.factories | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java create mode 100644 black-list/black-list-api/src/main/resources/META-INF/spring.factories diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java new file mode 100644 index 00000000..97e53902 --- /dev/null +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java @@ -0,0 +1,9 @@ +package cn.axzo.nanopart.api.config; + +import cn.axzo.nanopart.api.constant.NanopartConstant; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@EnableFeignClients(NanopartConstant.BASIC_FEIGN_PACKAGE) +public class MaoKaiApiAutoConfiguration { + +} diff --git a/black-list/black-list-api/src/main/resources/META-INF/spring.factories b/black-list/black-list-api/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..dbb56a60 --- /dev/null +++ b/black-list/black-list-api/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +cn.axzo.nanopart.api.config.MaoKaiApiAutoConfiguration \ No newline at end of file From 1e4e9711b3c04ec792c2a144f18b412b352661c0 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 18 Aug 2023 09:16:45 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0spring.factories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...AutoConfiguration.java => NanopartApiAutoConfiguration.java} | 2 +- .../black-list-api/src/main/resources/META-INF/spring.factories | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/{MaoKaiApiAutoConfiguration.java => NanopartApiAutoConfiguration.java} (83%) diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/NanopartApiAutoConfiguration.java similarity index 83% rename from black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java rename to black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/NanopartApiAutoConfiguration.java index 97e53902..816d5e34 100644 --- a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/MaoKaiApiAutoConfiguration.java +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/config/NanopartApiAutoConfiguration.java @@ -4,6 +4,6 @@ import cn.axzo.nanopart.api.constant.NanopartConstant; import org.springframework.cloud.openfeign.EnableFeignClients; @EnableFeignClients(NanopartConstant.BASIC_FEIGN_PACKAGE) -public class MaoKaiApiAutoConfiguration { +public class NanopartApiAutoConfiguration { } diff --git a/black-list/black-list-api/src/main/resources/META-INF/spring.factories b/black-list/black-list-api/src/main/resources/META-INF/spring.factories index dbb56a60..bf796ec6 100644 --- a/black-list/black-list-api/src/main/resources/META-INF/spring.factories +++ b/black-list/black-list-api/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -cn.axzo.nanopart.api.config.MaoKaiApiAutoConfiguration \ No newline at end of file +cn.axzo.nanopart.api.config.NanopartApiAutoConfiguration \ No newline at end of file From 37bedb908fa7cf71218b28f8f15bf6206b8ed02d Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 21 Aug 2023 09:41:15 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8D=95=E8=8E=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BlackAndWhiteListServiceImpl.java | 19 +++++-- .../exception/ExceptionAdviceHandler.java | 56 +++++++++++++++++++ 2 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 nanopart-server/src/main/java/cn/axzo/nanopart/config/exception/ExceptionAdviceHandler.java diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java index a22e7247..2b2cb9a6 100644 --- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java @@ -1,7 +1,9 @@ package cn.axzo.nanopart.server.service.impl; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.nanopart.api.constant.enums.ListTypeEnum; import cn.axzo.nanopart.api.request.BlackAndWhiteListReq; import cn.axzo.nanopart.api.response.BlackAndWhiteListResp; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; @@ -30,18 +32,27 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { /** * 新增一条黑白名单记录 - * @param req 包含module和param两个字段 + * @param req 包含type,module和param三个字段 * @return 记录id */ @Override public ApiResult create(BlackAndWhiteListReq req) { + // 黑白名单创建互斥,若存在于黑名单中则不允许存在于白名单中,反之亦然 + BlackAndWhiteListReq reverseReq = BeanMapper.copyBean(req, BlackAndWhiteListReq.class, (req1, req2) -> req2.setType((req1.getType().equals(ListTypeEnum.BLACK_LIST)) ? ListTypeEnum.WHITE_LIST : ListTypeEnum.BLACK_LIST)); + if (isInBlackOrWhiteList(reverseReq).getData()){ + throw new ServiceException("该记录已存在于"+reverseReq.getType().getDescription()+"中,不能创建对应"+req.getType().getDescription()); + } + // 同类型名单内唯一性校验 + if (isInBlackOrWhiteList(req).getData()){ + throw new ServiceException("该记录已存在于"+req.getType().getDescription()+"中"); + } return ApiResult.ok(blackAndWhiteListRepository.create(req)); } /** * 删除指定条件的所有黑白名单记录 * - * @param req 包含module和param两个字段 + * @param req 包含type,module和param三个字段 * @return null */ @Override @@ -51,7 +62,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { /** * 查询指定条件的所有黑白名单记录 - * @param req 包含module和param两个字段 + * @param req 包含type,module和param三个字段 * @return 记录列表 */ @Override @@ -63,7 +74,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { /** * 判断是否存在指定条件的黑白名单记录 - * @param req 包含module和param两个字段 + * @param req 包含type,module和param三个字段 * @return 记录存在返回true,否则返回false */ @Override diff --git a/nanopart-server/src/main/java/cn/axzo/nanopart/config/exception/ExceptionAdviceHandler.java b/nanopart-server/src/main/java/cn/axzo/nanopart/config/exception/ExceptionAdviceHandler.java new file mode 100644 index 00000000..5392e0a5 --- /dev/null +++ b/nanopart-server/src/main/java/cn/axzo/nanopart/config/exception/ExceptionAdviceHandler.java @@ -0,0 +1,56 @@ +package cn.axzo.nanopart.config.exception; + +import cn.axzo.framework.domain.web.result.ApiResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.BindException; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.List; + +/** + * @author: chenwenjian + * @date: 2023/8/17 17:04 + * @description: 统一异常处理 + * @modifiedBy: + * @version: 1.0 + */ +@Slf4j +@Order(value = 0) +@RestControllerAdvice +public class ExceptionAdviceHandler { + + @ExceptionHandler(cn.axzo.basics.common.exception.ServiceException.class) + public ApiResult basicsServiceExceptionHandler(cn.axzo.basics.common.exception.ServiceException e) { + log.warn("业务异常", e); + return ApiResult.err(e.getMessage()); + } + + @ExceptionHandler(cn.axzo.core.service.ServiceException.class) + public ApiResult coreServiceExceptionHandler(cn.axzo.core.service.ServiceException e) { + log.warn("业务异常", e); + return ApiResult.err(e.getMessage()); + } + + @ExceptionHandler(cn.axzo.framework.domain.ServiceException.class) + public ApiResult domainServiceExceptionHandler(cn.axzo.framework.domain.ServiceException e){ + log.warn("业务异常", e); + return ApiResult.err(e.getMessage()); + } + + @ExceptionHandler(BindException.class) + public ApiResult bindExceptionHandler(BindException e) { + log.warn("业务异常", e); + List allErrors = e.getBindingResult().getAllErrors(); + if (CollectionUtils.isEmpty(allErrors)) { + return ApiResult.err("操作失败 请联系系统管理员"); + } + ObjectError objectError = allErrors.get(0); + String objectErrorDefaultMessage = objectError.getDefaultMessage(); + return ApiResult.err(objectErrorDefaultMessage); + } + +}