• 授权规则及规则持久化


    授权规则及规则持久化

    授权规则是对调用方的来源来做控制,有白名单和黑名单两种方式

    白名单:来源 在白名单的调用者允许访问

    黑名单:来源在黑名单的调用者不允许访问

    利用网关的过滤器添加名为gateway的请求头

    default-filters:
      - AddRequestHeader=origin,gateway;
    
    • 1
    • 2

    添加判断条件

    @Component
    public class HeaderOriginParser implements RequestOriginParser {
        @Override
        public String parseOrigin(HttpServletRequest httpServletRequest) {
            String origin = httpServletRequest.getHeader("origin");
            
            if (StringUtils.isEmpty(origin)){
                origin="blank";
            }
            return origin;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    给/order/{orderId}添加授权规则

    在这里插入图片描述

    自定义异常结果

    默认情况下,发生限流、拦截、授权拦截时,都会抛出异常到调用方。如果要自定义异常返回结果,需要实现BlockExceptionHandler接口

    @Component
    public class SentinelExceptionHandler implements BlockExceptionHandler {
        @Override
        public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
            String msg = "未知异常";
            int status = 429;
    
            if (e instanceof FlowException) {
                msg = "请求被限流了";
            } else if (e instanceof ParamFlowException) {
                msg = "请求被热点参数限流";
            } else if (e instanceof DegradeException) {
                msg = "请求被降级了";
            } else if (e instanceof AuthorityException) {
                msg = "没有权限访问";
                status = 401;
            }
    
            response.setContentType("application/json;charset=utf-8");
            response.setStatus(status);
            response.getWriter().println("{\"msg\": " + msg + ", \"status\": " + status + "}");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    规则管理模式

    原始模式:将规则保存在内存中,重启服务会丢失

    pull模式:控制台将配置规则推送到Sentinel客户端,而客户端会将配置规则保存到本地文件或数据库中,以后会定时去本地文件或数据库中查询,更新本地规则

    push模式:控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端监听、Nacos,获取配置变更的推送消息,完成本地配置更新

    实现push模式

    一、修改order-service服务

    修改OrderService,让其监听Nacos中的sentinel规则配置。

    具体步骤如下:

    1.引入依赖

    在order-service中引入sentinel监听nacos的依赖:

    
        com.alibaba.csp
        sentinel-datasource-nacos
    
    
    • 1
    • 2
    • 3
    • 4

    2.配置nacos地址

    在order-service中的application.yml文件配置nacos地址及监听的配置信息:

    spring:
      cloud:
        sentinel:
          datasource:
            flow: #限流规则
              nacos:
                server-addr: localhost:8848 # nacos地址
                dataId: orderservice-flow-rules
                groupId: SENTINEL_GROUP
                rule-type: flow # 还可以是:degrade、authority、param-flow
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二、修改sentinel-dashboard源码

    SentinelDashboard默认不支持nacos的持久化,需要修改源码。
    在这里插入图片描述

    然后并用IDEA打开这个项目,结构如下:
    在这里插入图片描述

    2. 修改nacos依赖

    在sentinel-dashboard源码的pom文件中,nacos的依赖默认的scope是test,只能在测试时使用,这里要去除:

    在这里插入图片描述

    将sentinel-datasource-nacos依赖的scope去掉:

    <dependency>
        <groupId>com.alibaba.cspgroupId>
        <artifactId>sentinel-datasource-nacosartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    3. 添加nacos支持

    在sentinel-dashboard的test包下,已经编写了对nacos的支持,我们需要将其拷贝到main下。
    在这里插入图片描述

    4. 修改nacos地址

    然后,还需要修改测试代码中的NacosConfig类:

    在这里插入图片描述

    修改其中的nacos地址,让其读取application.properties中的配置:

    在这里插入图片描述

    在sentinel-dashboard的application.properties中添加nacos地址配置:

    nacos.addr=localhost:8848
    
    • 1

    5. 配置nacos数据源

    另外,还需要修改com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2类:

    在这里插入图片描述

    让我们添加的Nacos数据源生效:

    在这里插入图片描述

    6. 修改前端页面

    接下来,还要修改前端页面,添加一个支持nacos的菜单。

    修改src/main/webapp/resources/app/scripts/directives/sidebar/目录下的sidebar.html文件:

    在这里插入图片描述

    将其中的这部分注释打开:
    在这里插入图片描述

    修改其中的文本:

    在这里插入图片描述

    7. 重新编译、打包项目

    运行IDEA中的maven插件,编译和打包修改好的Sentinel-Dashboard:

    在这里插入图片描述

    8.启动

    启动方式跟官方一样:

    java -jar sentinel-dashboard.jar
    
    • 1

    如果要修改nacos地址,需要添加参数:

    java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar
    
    • 1
  • 相关阅读:
    dws层商品订单主题,220623,hm,
    李宏毅2020机器学习课程笔记(二)- 深度学习
    【从零到一】电子元器件网站建设/开发方案、流程及搭建要点全解
    科学家绘制全球140多万个湖泊和水库的水下地形图
    css:清除浮动的n种方式
    爬虫数据采集:探秘网络数据的捕获之道
    Bean的生命周期
    洛谷 P4735 最大异或和
    外汇天眼:一步错步步错,投资者表示真后悔遇到DIFX杀猪盘
    Nginx安装步骤、常用命令、三大应用(含配置文件内容)
  • 原文地址:https://blog.csdn.net/qq_57907966/article/details/126601063