官网地址:GitHub WIKI说明

【1】概述

很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

调用方信息通过 ContextUtil.enter(resourceName, origin) 方法中的 origin 参数传入。

规则配置
来源访问控制规则(AuthorityRule)非常简单,主要有以下配置项:

  • resource:资源名,即限流规则的作用对象。
  • limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB。
  • strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式。

【2】实践

需求:不允许资源/empower 被localhost进行访问。

① pom依赖

<!--SpringCloud ailibaba sentinel-datasource-nacos -->
 <dependency>
     <groupId>com.alibaba.csp</groupId>
     <artifactId>sentinel-datasource-nacos</artifactId>
 </dependency>
 <!--SpringCloud alibaba sentinel -->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
 </dependency>
 <!--nacos-discovery-->
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>

② controller

@RestController
@Slf4j
public class EmpowerController //Empower授权规则,用来处理请求的来源
{
    @GetMapping(value = "/empower")
    public String requestSentinel4()
    {
        log.info("测试Sentinel授权规则empower");
        return "Sentinel授权规则";
    }
}

③ 编写MyRequestOriginParser 实现RequestOriginParser用来作为黑白名单的“断言”功能

@Component
public class MyRequestOriginParser implements RequestOriginParser
{
    @Override
    public String parseOrigin(HttpServletRequest request)
    {

        return request.getHeader("Host");
    }
}

当然,这里根据具体需求还可以对参数、请求头等进行黑白名单控制。

④ 控制台配置

如下对localhost:8401进行黑名单控制

SpringCloud Alibaba Sentinel 授权规则实践总结_spring cloud

此时访问 http://localhost:8401/empower,将会被限制。

SpringCloud Alibaba Sentinel 授权规则实践总结_sentinel_02