From dd8da23c0f6002abcf0d05761166b7615a2e5949 Mon Sep 17 00:00:00 2001 From: Administrator Date: Tue, 15 Nov 2022 22:54:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91043~(apiKey=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/advice/ApiExceptionHandler.java | 22 +++++++++++++++ .../api/client/BeaconCacheClient.java | 7 ++++- .../api/controller/SmsController.java | 12 ++++++-- .../api/controller/TestController.java | 2 +- .../com/mashibing/api/enums/SmsCodeEnum.java | 21 -------------- .../com/mashibing/api/filter/CheckFilter.java | 6 ++-- .../api/filter/CheckFilterContext.java | 5 ++-- .../api/filter/impl/ApiKeyCheckFilter.java | 26 ++++++++++++++++- .../api/filter/impl/FeeCheckFilter.java | 3 +- .../api/filter/impl/IPCheckFilter.java | 3 +- .../api/filter/impl/MobileCheckFilter.java | 3 +- .../api/filter/impl/SignCheckFilter.java | 3 +- .../api/filter/impl/TemplateCheckFilter.java | 3 +- .../main/java/com/mashibing/api/util/R.java | 8 ++++++ .../api/filter/CheckFilterContextTest.java | 2 +- .../cache/controller/CacheController.java | 8 ++++++ .../common/constant/CacheConstant.java | 28 +++++++++++++++++++ .../common/enums/ExceptionEnums.java | 28 +++++++++++++++++++ .../common/exception/ApiException.java | 26 +++++++++++++++++ 19 files changed, 180 insertions(+), 36 deletions(-) create mode 100644 beacon-api/src/main/java/com/mashibing/api/advice/ApiExceptionHandler.java delete mode 100644 beacon-api/src/main/java/com/mashibing/api/enums/SmsCodeEnum.java create mode 100644 beacon-common/src/main/java/com/mashibing/common/constant/CacheConstant.java create mode 100644 beacon-common/src/main/java/com/mashibing/common/enums/ExceptionEnums.java create mode 100644 beacon-common/src/main/java/com/mashibing/common/exception/ApiException.java diff --git a/beacon-api/src/main/java/com/mashibing/api/advice/ApiExceptionHandler.java b/beacon-api/src/main/java/com/mashibing/api/advice/ApiExceptionHandler.java new file mode 100644 index 0000000..eb3c53c --- /dev/null +++ b/beacon-api/src/main/java/com/mashibing/api/advice/ApiExceptionHandler.java @@ -0,0 +1,22 @@ +package com.mashibing.api.advice; + +import com.mashibing.api.util.R; +import com.mashibing.api.vo.ResultVO; +import com.mashibing.common.exception.ApiException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @author zjw + * @description + */ +@RestControllerAdvice +public class ApiExceptionHandler{ + + @ExceptionHandler(ApiException.class) + public ResultVO apiException(ApiException ex){ + return R.error(ex); + } + + +} diff --git a/beacon-api/src/main/java/com/mashibing/api/client/BeaconCacheClient.java b/beacon-api/src/main/java/com/mashibing/api/client/BeaconCacheClient.java index fc9f74e..8aac4a4 100644 --- a/beacon-api/src/main/java/com/mashibing/api/client/BeaconCacheClient.java +++ b/beacon-api/src/main/java/com/mashibing/api/client/BeaconCacheClient.java @@ -1,6 +1,10 @@ package com.mashibing.api.client; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.Map; /** * @author zjw @@ -9,6 +13,7 @@ import org.springframework.cloud.openfeign.FeignClient; @FeignClient(value = "beacon-cache") public interface BeaconCacheClient { - + @GetMapping("/cache/hgetall/{key}") + Map hGetAll(@PathVariable(value = "key")String key); } diff --git a/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java b/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java index 0454c68..e171502 100644 --- a/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java +++ b/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java @@ -1,12 +1,14 @@ package com.mashibing.api.controller; -import com.mashibing.api.enums.SmsCodeEnum; +import com.mashibing.api.filter.CheckFilterContext; import com.mashibing.api.form.SingleSendForm; import com.mashibing.api.util.R; import com.mashibing.api.vo.ResultVO; +import com.mashibing.common.enums.ExceptionEnums; import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.validation.BindingResult; @@ -45,6 +47,9 @@ public class SmsController { private final String X_FORWARDED_FOR = "x-forwarded-for"; + @Autowired + private CheckFilterContext checkFilterContext; + /** * 单条验证短信接口 * @param singleSendForm @@ -58,7 +63,7 @@ public class SmsController { if (bindingResult.hasErrors()){ String msg = bindingResult.getFieldError().getDefaultMessage(); log.info("【接口模块-单条短信Controller】 参数不合法 msg = {}",msg); - return R.error(SmsCodeEnum.PARAMETER_ERROR.getCode(),msg); + return R.error(ExceptionEnums.PARAMETER_ERROR.getCode(),msg); } //=========================获取真实的IP地址========================================= String ip = this.getRealIP(req); @@ -72,6 +77,9 @@ public class SmsController { submit.setState(singleSendForm.getState()); submit.setUid(singleSendForm.getUid()); + //=========================调用策略模式的校验链========================================= + checkFilterContext.check(submit); + //=========================发送到MQ,交给策略模块处理========================================= return R.ok(); } diff --git a/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java b/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java index dee065d..745a856 100644 --- a/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java +++ b/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java @@ -18,6 +18,6 @@ public class TestController { @GetMapping("/api/test") public void test(){ System.out.println("===================================="); - checkFilterContext.check(new Object()); + checkFilterContext.check(null); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/enums/SmsCodeEnum.java b/beacon-api/src/main/java/com/mashibing/api/enums/SmsCodeEnum.java deleted file mode 100644 index 2b8eb5e..0000000 --- a/beacon-api/src/main/java/com/mashibing/api/enums/SmsCodeEnum.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mashibing.api.enums; - -import lombok.Getter; - -/** - * 一些响应信息中code和msg的对应 - * @author zjw - * @description - */ -@Getter -public enum SmsCodeEnum { - PARAMETER_ERROR(-10,"参数不合法!"); - - private Integer code; - private String msg; - - SmsCodeEnum(Integer code, String msg) { - this.code = code; - this.msg = msg; - } -} diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java index 4da5f07..a3282aa 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java @@ -1,5 +1,7 @@ package com.mashibing.api.filter; +import com.mashibing.common.model.StandardSubmit; + /** * * @author zjw @@ -9,7 +11,7 @@ public interface CheckFilter { /** * 校验!!!! - * @param object + * @param submit */ - void check(Object object); + void check(StandardSubmit submit); } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java index f7c353e..58c2abc 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java @@ -1,6 +1,7 @@ package com.mashibing.api.filter; import com.mashibing.api.form.SingleSendForm; +import com.mashibing.common.model.StandardSubmit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -28,14 +29,14 @@ public class CheckFilterContext { /** * 当前check方法用于管理校验链的顺序 */ - public void check(Object object) { + public void check(StandardSubmit submit) { // 单挑短信发送的策略 //1. 将获取到filters基于,做切分 String[] filterArray = filters.split(","); //2. 遍历数组即可 for (String filter : filterArray) { CheckFilter checkFilter = checkFiltersMap.get(filter); - checkFilter.check(object); + checkFilter.check(submit); } } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java index fc71031..2b68728 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java @@ -1,9 +1,17 @@ package com.mashibing.api.filter.impl; +import com.mashibing.api.client.BeaconCacheClient; import com.mashibing.api.filter.CheckFilter; +import com.mashibing.common.constant.CacheConstant; +import com.mashibing.common.enums.ExceptionEnums; +import com.mashibing.common.exception.ApiException; +import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Map; + /** * @author zjw * @description 校验客户的apikey是否合法 @@ -12,9 +20,25 @@ import org.springframework.stereotype.Service; @Slf4j public class ApiKeyCheckFilter implements CheckFilter { + @Autowired + private BeaconCacheClient cacheClient; + @Override - public void check(Object object) { + public void check(StandardSubmit submit) { log.info("【接口模块-校验apikey】 校验ing…………"); + //1. 基于cacheClient查询客户信息 + Map clientBusiness = cacheClient.hGetAll(CacheConstant.CLIENT_BUSINESS + submit.getApikey()); + + //2. 如果为null,直接扔异常 + if(clientBusiness == null || clientBusiness.size() == 0){ + log.info("【接口模块-校验apikey】 非法的apikey = {}",submit.getApikey()); + throw new ApiException(ExceptionEnums.ERROR_APIKEY); + } + + //3. 正常封装数据 + submit.setClientId(Long.parseLong(clientBusiness.get("clientId") + "")); + submit.setIp(clientBusiness.get("ipAddress") + ""); + log.info("【接口模块-校验apikey】 查询到客户信息 clientBusiness = {}",clientBusiness); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java index 29c7d84..7c4483c 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java @@ -1,6 +1,7 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; +import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ public class FeeCheckFilter implements CheckFilter { @Override - public void check(Object object) { + public void check(StandardSubmit submit) { log.info("【接口模块-校验客户余额】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java index eb3a503..787d665 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java @@ -1,6 +1,7 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; +import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ public class IPCheckFilter implements CheckFilter { @Override - public void check(Object object) { + public void check(StandardSubmit submit) { log.info("【接口模块-校验ip】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java index 99e6f75..7d3cf5f 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java @@ -1,6 +1,7 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; +import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ public class MobileCheckFilter implements CheckFilter { @Override - public void check(Object object) { + public void check(StandardSubmit submit) { log.info("【接口模块-校验手机号】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java index 5eaefb1..3271c50 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java @@ -1,6 +1,7 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; +import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ public class SignCheckFilter implements CheckFilter { @Override - public void check(Object object) { + public void check(StandardSubmit submit) { log.info("【接口模块-校验签名】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java index f03fae0..669c2b6 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java @@ -1,6 +1,7 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; +import com.mashibing.common.model.StandardSubmit; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ public class TemplateCheckFilter implements CheckFilter { @Override - public void check(Object object) { + public void check(StandardSubmit submit) { log.info("【接口模块-校验模板】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/util/R.java b/beacon-api/src/main/java/com/mashibing/api/util/R.java index b5e90a3..ced71a6 100644 --- a/beacon-api/src/main/java/com/mashibing/api/util/R.java +++ b/beacon-api/src/main/java/com/mashibing/api/util/R.java @@ -1,6 +1,8 @@ package com.mashibing.api.util; import com.mashibing.api.vo.ResultVO; +import com.mashibing.common.enums.ExceptionEnums; +import com.mashibing.common.exception.ApiException; /** * @author zjw @@ -21,4 +23,10 @@ public class R { r.setMsg(msg); return r; } + public static ResultVO error(ApiException ex) { + ResultVO r = new ResultVO(); + r.setCode(ex.getCode()); + r.setMsg(ex.getMessage()); + return r; + } } diff --git a/beacon-api/src/test/java/com/mashibing/api/filter/CheckFilterContextTest.java b/beacon-api/src/test/java/com/mashibing/api/filter/CheckFilterContextTest.java index a8b95bd..b38356d 100644 --- a/beacon-api/src/test/java/com/mashibing/api/filter/CheckFilterContextTest.java +++ b/beacon-api/src/test/java/com/mashibing/api/filter/CheckFilterContextTest.java @@ -17,6 +17,6 @@ public class CheckFilterContextTest { @org.junit.Test public void check() { Object obj = new Object(); - checkFilterContext.check(obj); + checkFilterContext.check(null); } } \ No newline at end of file diff --git a/beacon-cache/src/main/java/com/mashibing/cache/controller/CacheController.java b/beacon-cache/src/main/java/com/mashibing/cache/controller/CacheController.java index 1c5a192..599a622 100644 --- a/beacon-cache/src/main/java/com/mashibing/cache/controller/CacheController.java +++ b/beacon-cache/src/main/java/com/mashibing/cache/controller/CacheController.java @@ -38,4 +38,12 @@ public class CacheController { redisClient.sAdd(key,value); } + @GetMapping("/cache/hgetall/{key}") + public Map hGetAll(@PathVariable(value = "key")String key){ + log.info("【缓存模块】 hGetAll方法,获取key ={} 的数据", key); + Map value = redisClient.getMap(key); + log.info("【缓存模块】 hGetAll方法,获取key ={} 的数据 value = {}", key,value); + return value; + } + } diff --git a/beacon-common/src/main/java/com/mashibing/common/constant/CacheConstant.java b/beacon-common/src/main/java/com/mashibing/common/constant/CacheConstant.java new file mode 100644 index 0000000..62bba3e --- /dev/null +++ b/beacon-common/src/main/java/com/mashibing/common/constant/CacheConstant.java @@ -0,0 +1,28 @@ +package com.mashibing.common.constant; + +/** + * 缓存模块中的各种前缀 + * @author zjw + * @description + */ +public interface CacheConstant { + + /** + * 客户信息 + */ + String CLIENT_BUSINESS = "client_business:"; + /** + * 客户签名 + */ + String CLIENT_SIGN = "client_sign:"; + /** + * 客户签名的模板 + */ + String CLIENT_TEMPLATE = "client_template:"; + /** + * 客户的余额 + */ + String CLIENT_BALANCE = "client_balance:"; + + +} diff --git a/beacon-common/src/main/java/com/mashibing/common/enums/ExceptionEnums.java b/beacon-common/src/main/java/com/mashibing/common/enums/ExceptionEnums.java new file mode 100644 index 0000000..ea6739f --- /dev/null +++ b/beacon-common/src/main/java/com/mashibing/common/enums/ExceptionEnums.java @@ -0,0 +1,28 @@ +package com.mashibing.common.enums; + +import lombok.Getter; + +/** + * @author zjw + * @description + */ +@Getter +public enum ExceptionEnums { + + ERROR_APIKEY(-1,"非法的apikey"), + IP_NOT_WHITE(-2,"请求的ip不在白名单内"), + ERROR_SIGN(-3,"无可用签名"), + ERROR_TEMPLATE(-4,"无可用模板"), + ERROR_MOBILE(-5,"手机号格式不正确"), + BALANCE_NOT_ENOUGH(-6,"手客户余额不足"), + PARAMETER_ERROR(-10,"参数不合法!"), + ; + private Integer code; + + private String msg; + + ExceptionEnums(Integer code, String msg) { + this.code = code; + this.msg = msg; + } +} diff --git a/beacon-common/src/main/java/com/mashibing/common/exception/ApiException.java b/beacon-common/src/main/java/com/mashibing/common/exception/ApiException.java new file mode 100644 index 0000000..13bb8ba --- /dev/null +++ b/beacon-common/src/main/java/com/mashibing/common/exception/ApiException.java @@ -0,0 +1,26 @@ +package com.mashibing.common.exception; + +import com.mashibing.common.enums.ExceptionEnums; +import lombok.Getter; + +/** + * @author zjw + * @description + */ +@Getter +public class ApiException extends RuntimeException { + + private Integer code; + + public ApiException(String message, Integer code) { + super(message); + this.code = code; + } + + + public ApiException(ExceptionEnums enums) { + super(enums.getMsg()); + this.code = enums.getCode(); + } + +}