package com.newfiber.gateway.filter; import com.newfiber.common.core.utils.ServletUtils; 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; /** * 黑名单过滤器 * * @author newfiber */ @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)); }); } } }