近一年来一直做与其他方做接口方面的工作。做接口肯定就会涉及到一些白名单、授权、验证方面的问题。这里看一下白名单问题。
做过一个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