SpringBoot之对外Health心跳校验接口

背景:

       当前因为业务需求,对外需要暴露一个Health接口,用于检测当前的服务是否挂掉,然后通知相关项目负责人员,进行及时的补救,但是因为只是暴露了一个接口,没有相关的安全校验,存在安全漏洞,为了防止不能让任何人都可以成功访问该接口,就需要进行相关的

处理,这里采用的是一个比较成熟的wxpay的依赖包校验函数。

 

具体如下:
1.  Maven依赖

        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>

2.  配置文件配置秘钥信息(这部分信息是可以动态添加的,也就是要看调用方进行哪些信息的发送)

# 健康监控秘钥
controller:
  sign:
    key: ghghjghjghjghjg
    source: GGG

3.  获取配置文件

    @Value("${controller.sign.key}")
    private String signkey;

    @Value("${controller.sign.source}")
    private String source;

4.   Health的服务健康监控接口

Slf4j
@RestController
/**
 * @Author GCG
 * @Date:2021/1/11
 * @Description: 功能描述 : 服务健康监控接口:
 */
public class HealthController {

    @Autowired
    Application application;
    // 方式2: 直接使用Health实体类进行处理

    @GetMapping("/health")
    public ResponseEntity healthAction(@RequestParam Map<String, String> lastMap) {

        JSONObject jsonObject = new JSONObject();
        String result = null;
        try {
            result = WXPayUtil.generateSignature(lastMap, application.getSignkey());

        } catch (Exception e) {
            e.printStackTrace();
        }
         //对比参数sign
        try {
            if (lastMap.get("sign").toString().equals(result)) {
                if (application.getSource().equals(lastMap.get("source").toString())) {
                    //固定log日志的格式
                    log.info("当前服务正常!!!");
                    jsonObject.put("status", "UP");
                } else {
                    jsonObject.put("status", "DOWN");
                    jsonObject.put("message", "Sign值无效");
                }
            } else {
                jsonObject.put("status", "DOWN");
                jsonObject.put("message", "Sign值无效");
            }
        } catch (Exception e) {
            jsonObject.put("status", "DOWN");
            jsonObject.put("message", "缺少相关的参数,请检查是否输入Sign值");
        }
        return new ResponseEntity<>(jsonObject, HttpStatus.OK);
    }
}

总结:

从上面的接口可以看出,lastMap就是请求参数中所有的数据,这个需要请求方进行设置,同时在配置文件中添加的数据key,source等都是直接使用的请求方约定的秘钥。加密的算法也是使用相同的解密算法。原理上来讲就是MD5加密私钥。进行请求,我们这边进行MD5加密进行比较sign值。如果相同就是直接返回up,否则就是值无效。(采用MD5主要就是防止被反解,造成安全攻击)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值