springboot框架项目实践应用十五(扩展sentinel区分来源)

1.引言

在sentinel的流控规则,与授权规则中,都提供了来源区分。

比如流控规则:这里的针对来源,表示针对哪些调用来源进行限流

  • 默认值default表示不区分来源,即任何调用来源都限流
  • 如果需要指定来源进行限流,比如说调用端有:app、pc
  • 针对app调用要限流,针对pc调用不限流,该如何实现呢?
  • 需要注意:sentinel默认是只认default,其它不认识!!!

比如授权规则:这里流控应用,表示针对哪些应用调用需要授权,或者禁止

  • 配合选择白名单,表示流控应用中指定的应用,允许访问
  • 配合选择黑名单,表示流控应用中指定的应用,不允许访问
  • 需要注意:sentinel默认是不提供来源区分,因此授权规则默认情况下用不了
  • 那如果需要使用授权规则,该如何实现呢?

2.扩展RequestOriginParser

要想实现流控规则中的针对来源,以及授权规则中指定流控应用。sentinel给我们提供了一个接口

java 复制代码
public interface RequestOriginParser {
    String parseOrigin(HttpServletRequest var1);
}

我们只需要扩展RequestOriginParser接口,即可实现区分来源的业务场景需求,要实现区分来源,得有来源标识,这里我有两个建议

  • http请求参数中,传递来源标识
  • http请求头中,传递来源标识

在实际项目中,我建议从http请求头中,传递来源标识,这样会让请求更加优雅一些!放到请求参数中,会使得请求参数稍微难堪!比如这样的:http://ip:port/shop/add?origin=app,非要加【?origin=app】这一段来传递来源标识,丑陋,非常丑陋!

但是在我的这个案例中,为了演示方便,我还是选择丑陋的方式了,小伙伴们谅解!

java 复制代码
@Component
public class MyRequestOriginParser implements RequestOriginParser {

    /**
     * 解析来源
     * @param request
     * @return
     */
    public String parseOrigin(HttpServletRequest request) {
        // 1.这里从请求参数中获取origin(实际应用中,建议从http请求头获取更佳!)
        String origin = request.getParameter("origin");

        return origin;
    }
}

3.测试效果

启动应用,分别测试流控规则针对来源,以及授权规则,看看效果吧!

3.1.流控规则

配置流控规则,指定流控规则来源app

访问端点:http://127.0.0.1:8080/sentinel/grade/1?origin=app,疯狂刷新,流控了!

访问端点:http://127.0.0.1:8080/sentinel/grade/1?origin=pc,疯狂刷新,没有发生流控!

3.2.授权规则

配置授权规则,指定流控应用:app,并选择白名单,表示只允许app端访问

访问端点:http://127.0.0.1:8080/sentinel/grade/1?origin=app,可以正常访问!

访问端点:http://127.0.0.1:8080/sentinel/grade/1?origin=pc,禁止访问,提示没有授权!

shell 复制代码
{"status":500,"msg":"error,没有访问权限!"}

提前友情提示:原计划我们下一篇要分享【扩展sentinel之支持restful url】,因在sentinel新的版本中,已经支持了restful 风格url,那么该篇文章我们就省略了。

有小伙伴可能会有疑问,什么是restful风格url?

相关推荐
uhakadotcom3 分钟前
Python 量化计算入门:基础库和实用案例
后端·算法·面试
小萌新上大分4 分钟前
SpringCloudGateWay
java·开发语言·后端·springcloud·springgateway·cloudalibaba·gateway网关
uhakadotcom32 分钟前
使用Python获取Google Trends数据:2025年详细指南
后端·面试·github
uhakadotcom33 分钟前
使用 Python 与 Google Cloud Bigtable 进行交互
后端·面试·github
直视太阳1 小时前
springboot+easyexcel实现下载excels模板下拉选择
java·spring boot·后端
zkmall1 小时前
HikariCP 源码核心设计解析与 ZKmall开源商城场景调优实践
spring boot·开源
追逐时光者1 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
后端·.net
灼华十一1 小时前
Golang系列 - 内存对齐
开发语言·后端·golang
兰亭序咖啡2 小时前
学透Spring Boot — 009. Spring Boot的四种 Http 客户端
java·spring boot·后端
Asthenia04122 小时前
深入解析Pandas索引机制:离散选择与聚合选择的差异及常见误区
后端