请求安全问题思考 SpringBoot

159 阅读1分钟

解决方案一: 内网访问

服务间的交互放在互联网完全隔离的区域。 (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 {};

}