视频043~(apiKey校验)

master
Administrator 3 years ago
parent 3e47748c5a
commit dd8da23c0f

@ -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);
}
}

@ -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);
}

@ -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();
}

@ -18,6 +18,6 @@ public class TestController {
@GetMapping("/api/test")
public void test(){
System.out.println("====================================");
checkFilterContext.check(new Object());
checkFilterContext.check(null);
}
}

@ -1,21 +0,0 @@
package com.mashibing.api.enums;
import lombok.Getter;
/**
* codemsg
* @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;
}
}

@ -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);
}

@ -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);
}
}
}

@ -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);
}
}

@ -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…………");
}
}

@ -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…………");
}
}

@ -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…………");
}
}

@ -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…………");
}
}

@ -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…………");
}
}

@ -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;
}
}

@ -17,6 +17,6 @@ public class CheckFilterContextTest {
@org.junit.Test
public void check() {
Object obj = new Object();
checkFilterContext.check(obj);
checkFilterContext.check(null);
}
}

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

@ -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:";
}

@ -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;
}
}

@ -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();
}
}
Loading…
Cancel
Save