黑白名单与授权规则
引言:不是所有请求都应该被处理 在前面的文章中,我们学习了限流、熔断、系统保护、热点限流,它们都是流量控制的手段——控制流量的数量和速度。 但在实际生产中,还有另一种需求:访问控制。 场景1:恶意爬虫 你的电商网站被某个爬虫疯狂抓取,虽然做了限流,但爬虫会换IP继续攻击。 需求:将这个爬虫的IP拉黑,直接拒绝访问。 场景2:内部接口 你有一个管理后台接口,只允许内网IP访问,外网IP不允许访问。 需求:设置IP白名单,只允许特定IP访问。 场景3:VIP用户 你的系统有普通用户和VIP用户,在流量高峰期,需要优先保证VIP用户的访问。 需求:VIP用户不限流,普通用户限流。 这些场景都需要授权规则(Authority Rule)——根据调用来源决定是否允许访问。 授权规则的核心概念 什么是授权规则? 授权规则是Sentinel提供的访问控制机制,可以根据**调用来源(origin)**决定是否允许请求通过。 核心要素: 调用来源(origin):标识请求来自哪里(如IP、用户ID、应用名) 策略(strategy):黑名单或白名单 限制应用(limitApp):具体的来源值列表 黑名单 vs 白名单 类型 策略 规则 适用场景 白名单 AUTHORITY_WHITE 只允许名单内的来源访问 内部接口、VIP服务 黑名单 AUTHORITY_BLACK 拒绝名单内的来源访问 封禁恶意用户、爬虫 工作流程 请求到达 ↓ 提取调用来源(origin) ↓ 查找授权规则 ↓ 判断是否在黑/白名单中 ↓ ├─ 白名单:在名单内 → 通过,不在 → 拒绝 └─ 黑名单:在名单内 → 拒绝,不在 → 通过 ↓ 返回结果 配置授权规则 基础配置:黑名单 import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager; import com.alibaba.csp.sentinel.slots.block.RuleConstant; import java.util.ArrayList; import java.util.List; public class AuthorityRuleConfig { public static void initBlackListRule() { List<AuthorityRule> rules = new ArrayList<>(); AuthorityRule rule = new AuthorityRule(); rule.setResource("userInfo"); // 资源名 rule.setStrategy(RuleConstant.AUTHORITY_BLACK); // 黑名单策略 rule.setLimitApp("app1,app2"); // 黑名单列表(逗号分隔) rules.add(rule); AuthorityRuleManager.loadRules(rules); System.out.println("✅ 黑名单规则已加载:拒绝 app1, app2 访问"); } } 配置说明: ...