content: package com.jiron.gateway.filter;
  
  import java.util.ArrayList;
  import java.util.List;
  import java.util.regex.Pattern;
  import org.springframework.cloud.gateway.filter.GatewayFilter;
  import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
  import org.springframework.stereotype.Component;
  import com.jiron.common.core.utils.ServletUtils;
  
  /**
   * 黑名单过滤器
   *
   * @author ruoyi
   */
  @Component
  public class BlackListUrlFilter extends AbstractGatewayFilterFactory<BlackListUrlFilter.Config>
  {
      @Override
      public GatewayFilter apply(Config config)
      {
          return (exchange, chain) -> {
  
              String url = exchange.getRequest().getURI().getPath();
              if (config.matchBlacklist(url))
              {
                  return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求地址不允许访问");
              }
  
              return chain.filter(exchange);
          };
      }
  
      public BlackListUrlFilter()
      {
          super(Config.class);
      }
  
      public static class Config
      {
          private List<String> blacklistUrl;
  
          private List<Pattern> blacklistUrlPattern = new ArrayList<>();
  
          public boolean matchBlacklist(String url)
          {
              return !blacklistUrlPattern.isEmpty() && blacklistUrlPattern.stream().anyMatch(p -> p.matcher(url).find());
          }
  
          public List<String> getBlacklistUrl()
          {
              return blacklistUrl;
          }
  
          public void setBlacklistUrl(List<String> blacklistUrl)
          {
              this.blacklistUrl = blacklistUrl;
              this.blacklistUrlPattern.clear();
              this.blacklistUrl.forEach(url -> {
                  this.blacklistUrlPattern.add(Pattern.compile(url.replaceAll("\\*\\*", "(.*?)"), Pattern.CASE_INSENSITIVE));
              });
          }
      }
  
  }
  