package com.aps.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.aps.common.core.utils.ServletUtils; /** * 黑名单过滤器 * * @author ruoyi */ @Component public class BlackListUrlFilter extends AbstractGatewayFilterFactory { @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 blacklistUrl; private List blacklistUrlPattern = new ArrayList<>(); public boolean matchBlacklist(String url) { return !blacklistUrlPattern.isEmpty() && blacklistUrlPattern.stream().anyMatch(p -> p.matcher(url).find()); } public List getBlacklistUrl() { return blacklistUrl; } public void setBlacklistUrl(List blacklistUrl) { this.blacklistUrl = blacklistUrl; this.blacklistUrlPattern.clear(); this.blacklistUrl.forEach(url -> { this.blacklistUrlPattern.add(Pattern.compile(url.replaceAll("\\*\\*", "(.*?)"), Pattern.CASE_INSENSITIVE)); }); } } }