解决方案一: 内网访问
服务间的交互放在互联网完全隔离的区域。 (IP:Port Feign\http 调用),只允许信任的机器访问。 域名(内网域名)
解决方案二: 接口增加认证鉴权和验签
解决方案三: HttpRequest 拦截器 限制不允许通过公网进来的请求,放行接口做了身份认证和数据验签的接口访问
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
String str = request.getURI().toString();
//todo 判断请求的API地址是否允许通过域名访问!!!!
String str1 = str.replace("https://baidu.com", "http://39.156.66.10:8080");
URI newUri = UriComponentsBuilder.fromUri(URI.create(str)).build().toUri();
return execution.execute(new UriModifyHttpRequestWrapper(request, newUri), body);
}
private static class UriModifyHttpRequestWrapper extends HttpRequestWrapper {
private final URI uri;
public UriModifyHttpRequestWrapper(HttpRequest request, URI uri) {
super(request);
this.uri = uri;
}
@Override
public URI getURI() {
return uri;
}
}
}
解决方案四:增加注解“服务调用不鉴权”
/**
* 服务调用不鉴权注解
*
* @author lengleng
* @date 2020-06-14
*/
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Inner {
/**
* 是否AOP统一处理
* @return false, true
*/
boolean value() default true;
/**
* 需要特殊判空的字段(预留)
* @return {}
*/
String[] field() default {};
}