与第三方接口调用时白名单功能

在接口开发中,白名单功能是确保安全的重要环节。本文通过实例讲述了如何在DLL插件接口和HTTP接口中实现白名单验证。对于DLL接口,采用MAC地址加密授权;HTTP接口则存储允许访问的IP,并在接收到请求时与数据库中的IP进行匹配。然而,线上环境的负载均衡和反向代理导致获取到的IP并非原始请求IP,需要调整策略以获取正确IP,如遇到多层nginx跳转,可能需要处理多个IP的情况。
摘要由CSDN通过智能技术生成
  近一年来一直做与其他方做接口方面的工作。做接口肯定就会涉及到一些白名单、授权、验证方面的问题。这里看一下白名单问题。
       做过一个dll插件的接口,方式是我们把此dll发给第三方,第三方将此dll放到他们的程序中,通过加载此动态库,调用里面的方法完成业务功能。由于是通过此接口的客户端进行收费的,所有必须控制进行一个授权。首先我们把他们需要使用接口的电脑的mac地址拿过来,用我们的加密工具进行一个加密,将加密后加密的串存到我们的数据库授权表中。这要以后他们在调用动态库的时候,会把电脑的nac地址传到后台,用同样的加密方式进行加密,在与数据库中的字段进行对比,如果相同证明没有问题,不相同返回未进行授权提示。
       最近做一个http的第三方接口,使用post请求。但是由于这个接口是发布在外网上的,所以要做一个白名单的验证,不让所有的用户来进行访问。我们将可以访问的ip存到数据库中,当有请求到来时,取出此发送请求的ip地址,让后进行一个匹配。首先我们开发时使用的方法
  
  
  
ip = request.getRemoteAddr();
但是发布到线上后发现不对了,取出的ip不是发送请求的ip,后来发现原来我们线上环境通过一次nginx进行一次负载均衡,做了一次反向代理,导致取出ip不是原始ip了,变成nginx的ip了。后来改为
   
   
   
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值