小院 3.20 18:11

master
msb_221930 4 months ago
parent f6d20219a5
commit 615c0558d9

@ -5,5 +5,6 @@
<file url="file://$PROJECT_DIR$/beacon-api/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/beacon-api/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/beacon-cache/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/beacon-cache/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/beacon-common/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/beacon-common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/beacon-test/src/main/java" charset="UTF-8" />
</component> </component>
</project> </project>

@ -0,0 +1,24 @@
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.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @author dch
* @create 2024-03-20 17:10
*/
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler(ApiException.class)
public ResultVO apiException(ApiException ex){
return R.error(ex);
}
}

@ -1,12 +1,19 @@
package com.mashibing.api.client; package com.mashibing.api.client;
import org.springframework.cloud.openfeign.FeignClient; 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 dch * @author dch
* @create 2024-03-19 23:56 * @create 2024-03-20 11:54
*/ */
@FeignClient(value="beacon-cache") @FeignClient("beacon-cache")
public class BeaconCacheClient { public interface BeaconCacheClient {
@GetMapping("/cache/hgetall/{key}")
Map hGetAll(@PathVariable(value = "key")String key);
} }

@ -1,6 +1,7 @@
package com.mashibing.api.controller; package com.mashibing.api.controller;
import com.mashibing.api.filter.CheckFilterContext; import com.mashibing.api.filter.CheckFilterContext;
import com.mashibing.common.model.StandardSubmit;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -17,6 +18,6 @@ public class ApiTestController {
@GetMapping("/api/test") @GetMapping("/api/test")
public void test(){ public void test(){
System.out.println("===================================="); System.out.println("====================================");
checkFilterContext.check(new Object()); checkFilterContext.check(new StandardSubmit());
} }
} }

@ -1,12 +1,14 @@
package com.mashibing.api.controller; package com.mashibing.api.controller;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.mashibing.api.enums.SmsCodeEnum; import com.mashibing.api.filter.CheckFilterContext;
import com.mashibing.api.form.SingleSendForm; import com.mashibing.api.form.SingleSendForm;
import com.mashibing.api.util.R; import com.mashibing.api.util.R;
import com.mashibing.api.vo.ResultVO; import com.mashibing.api.vo.ResultVO;
import com.mashibing.common.enums.ExceptionEnums;
import com.mashibing.common.model.StandardSubmit; import com.mashibing.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
@ -46,6 +48,9 @@ public class SmsController {
private final String HEADERHOST = "host"; private final String HEADERHOST = "host";
@Autowired
private CheckFilterContext checkFilterContext;
@PostMapping(value = "/single_send", produces = "application/json;charset=utf-8") @PostMapping(value = "/single_send", produces = "application/json;charset=utf-8")
public ResultVO singleSend(@RequestBody @Validated SingleSendForm singleSendForm, BindingResult bindingResult, HttpServletRequest req) { public ResultVO singleSend(@RequestBody @Validated SingleSendForm singleSendForm, BindingResult bindingResult, HttpServletRequest req) {
@ -53,7 +58,7 @@ public class SmsController {
if (bindingResult.hasErrors()){ if (bindingResult.hasErrors()){
String msg = bindingResult.getFieldError().getDefaultMessage(); String msg = bindingResult.getFieldError().getDefaultMessage();
log.info("【接口模块-单条短信Controller】 参数不合法 msg = {}",msg); log.info("【接口模块-单条短信Controller】 参数不合法 msg = {}",msg);
return R.error(SmsCodeEnum.PARAMETER_ERROR.getCode(),msg); return R.error(ExceptionEnums.PARAMETER_ERROR.getCode(),msg);
} }
//=========================获取真实的IP地址========================================= //=========================获取真实的IP地址=========================================
String ip = this.getRealIP(req); String ip = this.getRealIP(req);
@ -66,6 +71,9 @@ public class SmsController {
submit.setText(singleSendForm.getText()); submit.setText(singleSendForm.getText());
submit.setState(singleSendForm.getState()); submit.setState(singleSendForm.getState());
submit.setUid(singleSendForm.getUid()); submit.setUid(singleSendForm.getUid());
//============================调用策略模式的校验链============================================
checkFilterContext.check(submit);
//=========================发送到MQ交给策略模块处理========================================= //=========================发送到MQ交给策略模块处理=========================================
return R.ok(); return R.ok();

@ -1,21 +0,0 @@
package com.mashibing.api.enums;
import lombok.Getter;
/**
* @author dch
* @create 2024-03-19 0:24
* * codemsg
*/
@Getter
public enum SmsCodeEnum {
PARAMETER_ERROR(-10, "参数不合法!");
private Integer code;
private String msg;
SmsCodeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}

@ -1,10 +1,12 @@
package com.mashibing.api.filter; package com.mashibing.api.filter;
import com.mashibing.common.model.StandardSubmit;
/** /**
* @author dch * @author dch
* @create 2024-03-18 23:18 * @create 2024-03-18 23:18
*/ */
public interface CheckFilter { public interface CheckFilter {
void check(Object obj); void check(StandardSubmit submit);
} }

@ -1,5 +1,6 @@
package com.mashibing.api.filter; package com.mashibing.api.filter;
import com.mashibing.common.model.StandardSubmit;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
@ -27,13 +28,13 @@ public class CheckFilterContext {
/** /**
* check * check
*/ */
public void check(Object obj){ public void check(StandardSubmit submit){
//1. 将获取到filters基于,做切分 //1. 将获取到filters基于,做切分
String[] filterArray = filters.split(","); String[] filterArray = filters.split(",");
//2. 遍历数组即可 //2. 遍历数组即可
for (String filter : filterArray) { for (String filter : filterArray) {
CheckFilter checkFilter = checkFiltersMap.get(filter); CheckFilter checkFilter = checkFiltersMap.get(filter);
checkFilter.check(obj); checkFilter.check(submit);
} }
} }
} }

@ -1,9 +1,17 @@
package com.mashibing.api.filter.impl; package com.mashibing.api.filter.impl;
import com.mashibing.api.client.BeaconCacheClient;
import com.mashibing.api.filter.CheckFilter; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map;
/** /**
* @author dch * @author dch
* @create 2024-03-18 23:19/** * @create 2024-03-18 23:19/**
@ -15,8 +23,25 @@ import org.springframework.stereotype.Service;
@Slf4j @Slf4j
public class ApiKeyCheckFilter implements CheckFilter { public class ApiKeyCheckFilter implements CheckFilter {
@Autowired
private BeaconCacheClient cacheClient;
@Override @Override
public void check(Object obj) { public void check(StandardSubmit submit) {
log.info("【接口模块-校验apikey】 校验ing…………"); 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("id") + ""));
log.info("【接口模块-校验apikey】 查询到客户信息 clientBusiness = {}",clientBusiness);
} }
} }

@ -1,6 +1,7 @@
package com.mashibing.api.filter.impl; package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter; import com.mashibing.api.filter.CheckFilter;
import com.mashibing.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +16,7 @@ public class FeeCheckFilter implements CheckFilter {
@Override @Override
public void check(Object obj) { public void check(StandardSubmit submit) {
log.info("【接口模块-校验客户余额】 校验ing…………"); log.info("【接口模块-校验客户余额】 校验ing…………");
} }
} }

@ -1,6 +1,7 @@
package com.mashibing.api.filter.impl; package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter; import com.mashibing.api.filter.CheckFilter;
import com.mashibing.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -13,7 +14,7 @@ import org.springframework.stereotype.Service;
@Slf4j @Slf4j
public class IPCheckFilter implements CheckFilter { public class IPCheckFilter implements CheckFilter {
@Override @Override
public void check(Object obj) { public void check(StandardSubmit submit) {
log.info("【接口模块-校验ip】 校验ing…………"); log.info("【接口模块-校验ip】 校验ing…………");
} }
} }

@ -1,6 +1,7 @@
package com.mashibing.api.filter.impl; package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter; import com.mashibing.api.filter.CheckFilter;
import com.mashibing.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +16,7 @@ public class MobileCheckFilter implements CheckFilter {
@Override @Override
public void check(Object obj) { public void check(StandardSubmit submit) {
log.info("【接口模块-校验手机号】 校验ing…………"); log.info("【接口模块-校验手机号】 校验ing…………");
} }
} }

@ -1,6 +1,7 @@
package com.mashibing.api.filter.impl; package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter; import com.mashibing.api.filter.CheckFilter;
import com.mashibing.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +16,7 @@ public class SignCheckFilter implements CheckFilter {
@Override @Override
public void check(Object obj) { public void check(StandardSubmit submit) {
log.info("【接口模块-校验签名】 校验ing…………"); log.info("【接口模块-校验签名】 校验ing…………");
} }
} }

@ -1,6 +1,7 @@
package com.mashibing.api.filter.impl; package com.mashibing.api.filter.impl;
import com.mashibing.api.filter.CheckFilter; import com.mashibing.api.filter.CheckFilter;
import com.mashibing.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +16,7 @@ public class TemplateCheckFilter implements CheckFilter {
@Override @Override
public void check(Object obj) { public void check(StandardSubmit submit) {
log.info("【接口模块-校验模板】 校验ing…………"); log.info("【接口模块-校验模板】 校验ing…………");
} }
} }

@ -1,6 +1,8 @@
package com.mashibing.api.util; package com.mashibing.api.util;
import com.mashibing.api.vo.ResultVO; import com.mashibing.api.vo.ResultVO;
import com.mashibing.common.enums.ExceptionEnums;
import com.mashibing.common.exception.ApiException;
/** /**
* @author dch * @author dch
@ -22,4 +24,11 @@ public class R {
return r; return r;
} }
public static ResultVO error(ApiException ex){
ResultVO r = new ResultVO();
r.setCode(ex.getCode());
r.setMsg(ex.getMessage());
return r;
}
} }

@ -9,9 +9,9 @@ spring:
cloud: cloud:
nacos: nacos:
discovery: discovery:
server-addr: 192.168.1.113:8848 server-addr: 192.168.1.133:8848
# nacos配置中心地址: # nacos配置中心地址:
config: config:
server-addr: 192.168.1.113:8848 server-addr: 192.168.1.133:8848
file-extension: yml file-extension: yml
# beacon-api-dev.yml # beacon-api-dev.yml

@ -1,5 +1,6 @@
package com.mashibing.api.filter; package com.mashibing.api.filter;
import com.mashibing.common.model.StandardSubmit;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -21,7 +22,8 @@ public class CheckFilterContextTest {
@org.junit.Test @org.junit.Test
public void check() { public void check() {
Object obj = new Object(); // Object obj = new Object();
checkFilterContext.check(obj); StandardSubmit standardSubmit = new StandardSubmit();
checkFilterContext.check(standardSubmit);
} }
} }

@ -35,5 +35,12 @@ public class CacheController {
redisClient.sAdd(key,value); redisClient.sAdd(key,value);
} }
@GetMapping("/cache/hgetall/{key}")
public Map hGetAll(@PathVariable(value = "key")String key){
log.info("【缓存模块】 hGetAll方法获取key ={} 的数据", key);
Map<String, Object> value = redisClient.hGetAll(key);
log.info("【缓存模块】 hGetAll方法获取key ={} 的数据 value = {}", key,value);
return value;
}
} }

@ -9,9 +9,9 @@ spring:
cloud: cloud:
nacos: nacos:
discovery: discovery:
server-addr: 192.168.43.132:8848 server-addr: 192.168.1.133:8848
# nacos配置中心地址: # nacos配置中心地址:
config: config:
server-addr: 192.168.43.132:8848 server-addr: 192.168.1.133:8848
file-extension: yml file-extension: yml
# beacon-cache-dev.yml # beacon-cache-dev.yml

@ -0,0 +1,16 @@
package com.mashibing.common.constant;
/**
* @author dch
* @create 2024-03-20 12:05
*/
public interface CacheConstant {
String CLIENT_BUSINESS = "client_business:";
String CLIENT_SIGN = "client_sign:";
String CLIENT_TEMPLATE = "client_template:";
String CLIENT_BALANCE = "client_balance:";
}

@ -0,0 +1,28 @@
package com.mashibing.common.enums;
import lombok.Getter;
/**
* @author dch
* @create 2024-03-20 12:17
*/
@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;
}
}

@ -0,0 +1,26 @@
package com.mashibing.common.exception;
import com.mashibing.common.enums.ExceptionEnums;
import lombok.Getter;
/**
* @author dch
* @create 2024-03-20 12:15
*/
@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();
}
}

@ -6,13 +6,13 @@ spring:
cloud: cloud:
nacos: nacos:
discovery: discovery:
server-addr: 192.168.43.132:8848 server-addr: 192.168.1.133:8848
# datasource # datasource
datasource: datasource:
driver-class-name: org.gjt.mm.mysql.Driver driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/beacon_cloud?characterEncoding=utf-8&useSSL=false url: jdbc:mysql://localhost:3306/beacon_cloud?characterEncoding=utf-8&useSSL=false
username: root username: root
password: 1234 password: 123456
# 端口号 # 端口号
server: server:
port: 20000 port: 20000

Loading…
Cancel
Save