小院 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-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-test/src/main/java" charset="UTF-8" />
</component>
</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;
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
* @create 2024-03-19 23:56
* @create 2024-03-20 11:54
*/
@FeignClient(value="beacon-cache")
public class BeaconCacheClient {
@FeignClient("beacon-cache")
public interface BeaconCacheClient {
@GetMapping("/cache/hgetall/{key}")
Map hGetAll(@PathVariable(value = "key")String key);
}

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

@ -1,12 +1,14 @@
package com.mashibing.api.controller;
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.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.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;
@ -46,6 +48,9 @@ public class SmsController {
private final String HEADERHOST = "host";
@Autowired
private CheckFilterContext checkFilterContext;
@PostMapping(value = "/single_send", produces = "application/json;charset=utf-8")
public ResultVO singleSend(@RequestBody @Validated SingleSendForm singleSendForm, BindingResult bindingResult, HttpServletRequest req) {
@ -53,7 +58,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);
@ -66,6 +71,9 @@ public class SmsController {
submit.setText(singleSendForm.getText());
submit.setState(singleSendForm.getState());
submit.setUid(singleSendForm.getUid());
//============================调用策略模式的校验链============================================
checkFilterContext.check(submit);
//=========================发送到MQ交给策略模块处理=========================================
return R.ok();
@ -165,4 +173,4 @@ public class SmsController {
}
}
}

@ -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;
import com.mashibing.common.model.StandardSubmit;
/**
* @author dch
* @create 2024-03-18 23:18
*/
public interface CheckFilter {
void check(Object obj);
void check(StandardSubmit submit);
}

@ -1,5 +1,6 @@
package com.mashibing.api.filter;
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;
@ -27,13 +28,13 @@ public class CheckFilterContext {
/**
* check
*/
public void check(Object obj){
public void check(StandardSubmit submit){
//1. 将获取到filters基于,做切分
String[] filterArray = filters.split(",");
//2. 遍历数组即可
for (String filter : filterArray) {
CheckFilter checkFilter = checkFiltersMap.get(filter);
checkFilter.check(obj);
checkFilter.check(submit);
}
}
}

@ -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 dch
* @create 2024-03-18 23:19/**
@ -15,8 +23,25 @@ import org.springframework.stereotype.Service;
@Slf4j
public class ApiKeyCheckFilter implements CheckFilter {
@Autowired
private BeaconCacheClient cacheClient;
@Override
public void check(Object obj) {
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("id") + ""));
log.info("【接口模块-校验apikey】 查询到客户信息 clientBusiness = {}",clientBusiness);
}
}

@ -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;
@ -15,7 +16,7 @@ public class FeeCheckFilter implements CheckFilter {
@Override
public void check(Object obj) {
public void check(StandardSubmit submit) {
log.info("【接口模块-校验客户余额】 校验ing…………");
}
}
}

@ -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;
@ -13,7 +14,7 @@ import org.springframework.stereotype.Service;
@Slf4j
public class IPCheckFilter implements CheckFilter {
@Override
public void check(Object obj) {
public void check(StandardSubmit submit) {
log.info("【接口模块-校验ip】 校验ing…………");
}
}

@ -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;
@ -15,7 +16,7 @@ public class MobileCheckFilter implements CheckFilter {
@Override
public void check(Object obj) {
public void check(StandardSubmit submit) {
log.info("【接口模块-校验手机号】 校验ing…………");
}
}
}

@ -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;
@ -15,7 +16,7 @@ public class SignCheckFilter implements CheckFilter {
@Override
public void check(Object obj) {
public void check(StandardSubmit submit) {
log.info("【接口模块-校验签名】 校验ing…………");
}
}
}

@ -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;
@ -15,7 +16,7 @@ public class TemplateCheckFilter implements CheckFilter {
@Override
public void check(Object obj) {
public void check(StandardSubmit submit) {
log.info("【接口模块-校验模板】 校验ing…………");
}
}
}

@ -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 dch
@ -22,4 +24,11 @@ public class 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:
nacos:
discovery:
server-addr: 192.168.1.113:8848
server-addr: 192.168.1.133:8848
# nacos配置中心地址:
config:
server-addr: 192.168.1.113:8848
server-addr: 192.168.1.133:8848
file-extension: yml
# beacon-api-dev.yml

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

@ -35,5 +35,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<String, Object> value = redisClient.hGetAll(key);
log.info("【缓存模块】 hGetAll方法获取key ={} 的数据 value = {}", key,value);
return value;
}
}

@ -9,9 +9,9 @@ spring:
cloud:
nacos:
discovery:
server-addr: 192.168.43.132:8848
server-addr: 192.168.1.133:8848
# nacos配置中心地址:
config:
server-addr: 192.168.43.132:8848
server-addr: 192.168.1.133:8848
file-extension: 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:
nacos:
discovery:
server-addr: 192.168.43.132:8848
server-addr: 192.168.1.133:8848
# datasource
datasource:
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/beacon_cloud?characterEncoding=utf-8&useSSL=false
username: root
password: 1234
password: 123456
# 端口号
server:
port: 20000
@ -20,4 +20,4 @@ server:
# mybatis
mybatis:
configuration:
map-underscore-to-camel-case: true
map-underscore-to-camel-case: true

Loading…
Cancel
Save