Весенний ботинок Блок дачный в зууле - PullRequest
0 голосов
/ 03 марта 2019

Я разработал некоторые сервисы на основе шаблона микросервиса со шлюзом API, я использую zuul для шлюза API, я хочу заблокировать некоторые страны в шлюзе, я не могу реализовать его на сетевом уровне, потому что мне нужна страница ошибки и код состояния

1 Ответ

0 голосов
/ 03 марта 2019

Страны не включены в заголовок HTTP.Вам нужно будет сделать сопоставление между IP и страной.Также обратите внимание, что удаленный адрес клиента может передаваться несколькими способами (главным образом прямым и прокси-сервером).

Таким образом, вы можете создать фильтр Zuul для:

@Component
public class CountryZuulFilter extends ZuulFilter {

    @Override
    public Object run() {

        RequestContext ctx = RequestContext.getCurrentContext();
        String ip = ctx.getRequest()
                       .getHeader("Remote_Addr");
        if (ip == null) {
            ip = ctx.getRequest().getHeader("HTTP_X_FORWARDED_FOR");

            if (ip == null) {
                ip = ctx.getRequest().getRemoteAddr();
            }

        }
        // use an API to map the IP to a country
         String countryCode = lookupCountry(ip);
        // return a 401 if not authorized
        if (forbidenCountries.contains(countryCode)) {
            ctx.setResponseStatusCode(HttpStatus.FORBIDDEN.value());
        }
        return null;
    }

    @Override
    public boolean shouldFilter() {
       return true;
   }

   @Override
   public String filterType() {
      return "pre";
   }

   @Override
   public int filterOrder() {
       return 0;
   }

}

Для получения удаленного IP-адреса укажите этот ответ .

...