当我们要写接口给第三方使用,一般都必须加验证信息,验证信息的方式有很多,有用户密码验证,有基本认证,有IP白名单…,其中IP白名单算是对第三方开发人员比较友好的一种认证方式,直接发送数据请求接口即可。
注意:一般IP限制都是指对公网IP的限制
获取公网IP方法:
/**
* 获取请求的公网ip
*/
public static String getIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(",");
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
}
ip = request.getHeader("X-Real-IP");
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
return ip;
}
return request.getRemoteAddr();
}
注意:这里获取公网ip的数据对象为客户端的请求,如何获得该请求对象请看下面实际运用
如何将该方法运用到自己的接口上:
@ApiOperation("xx接口")
@GetMapping("/ipTest")
public ResultMsg ipTest() {
//IP白名单检测
//将请求该接口的请求头数据拿出来
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
//调用获取公网ip方法
String IpUrl = GetIpUtil.getIp(request);
System.out.println("请求方公网ip为:" + IpUrl);
if (!IpUrl.equals("xxx.xxx.xxx.xxx")) {//判断是否和你设定的白名单ip一致
return ResultMsg.create(ResultMsg.FAIL,"您的公网ip不在白名单内");
}
..........通过白名单后的操作
}