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?

相关推荐
不光头强3 小时前
spring cloud知识总结
后端·spring·spring cloud
GetcharZp6 小时前
告别 Python 依赖!用 LangChainGo 打造高性能大模型应用,Go 程序员必看!
后端
阿里加多6 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
小小李程序员7 小时前
Langchain4j工具调用获取不到ThreadLocal
java·后端·ai
GreenTea9 小时前
AI Agent 评测的下半场:从方法论到落地实践
前端·人工智能·后端
我是若尘10 小时前
Harness Engineering:2026 年 AI 编程的核心战场
前端·后端·程序员
一 乐10 小时前
物流信息管理|基于springboot + vue物流信息管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·物流信息管理系统