最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Sentinel自定義返回和實(shí)現(xiàn)區(qū)分來源方式

 更新時(shí)間:2025年04月02日 16:43:50   作者:Gangbb  
這篇文章主要介紹了使用Sentinel自定義返回和實(shí)現(xiàn)區(qū)分來源方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Sentinel自定義返回和實(shí)現(xiàn)區(qū)分來源

1. 自定義錯(cuò)誤返回

因?yàn)榱骺睾徒导?jí)頁面報(bào)的異常都是相同的,所以可以優(yōu)化一下。

使用官方的接口BlockExceptionHandler(2.2.7.RELEASE)、UrlBlockHandler(0.9.0.RELEASE)

定義處理類:

@Component
public class MyUrlBlockHandler implements BlockExceptionHandler {

    @Override
    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse response, BlockException ex) throws Exception {
        ErrorMsg msg = null;
        if (ex instanceof FlowException) {
            msg = ErrorMsg.builder()
                    .status(100)
                    .msg("限流了")
                    .build();
        } else if (ex instanceof DegradeException) {
            msg = ErrorMsg.builder()
                    .status(101)
                    .msg("降級(jí)了")
                    .build();
        } else if (ex instanceof ParamFlowException) {
            msg = ErrorMsg.builder()
                    .status(102)
                    .msg("熱點(diǎn)參數(shù)限流")
                    .build();
        } else if (ex instanceof SystemBlockException) {
            msg = ErrorMsg.builder()
                    .status(103)
                    .msg("系統(tǒng)規(guī)則(負(fù)載/...不滿足要求)")
                    .build();
        } else if (ex instanceof AuthorityException) {
            msg = ErrorMsg.builder()
                    .status(104)
                    .msg("授權(quán)規(guī)則不通過")
                    .build();
        }
        // http狀態(tài)碼
        response.setStatus(500);
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Type", "application/json;charset=utf-8");
        response.setContentType("application/json;charset=utf-8");
        // spring mvc自帶的json操作工具,叫jackson
        new ObjectMapper()
                .writeValue(
                        response.getWriter(),
                        msg
                );
    }
}

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class ErrorMsg {
    private Integer status;
    private String msg;
}

效果:

2. 實(shí)現(xiàn)區(qū)分來源

使用RequestOriginParser接口

@Component
public class MyRequestOriginParser implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest request) {
        // 從請(qǐng)求參數(shù)中獲取名為 origin 的參數(shù)并返回
        // 如果獲取不到origin參數(shù),那么就拋異常

        String origin = request.getParameter("origin");
        if (StringUtils.isBlank(origin)) {
            throw new IllegalArgumentException("origin must be specified");
        }
        return origin;
    }
}

訪問:http://127.0.0.1:8010/shares/1

控制臺(tái):

加上參數(shù)就可以了:

新加授權(quán)規(guī)則

再訪問就不行了:

新增流控規(guī)則

換個(gè)名字就不會(huì)被限流

真實(shí)項(xiàng)目中一般把需要的參數(shù)放在請(qǐng)求header

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • httpclient的disableConnectionState方法工作流程

    httpclient的disableConnectionState方法工作流程

    這篇文章主要為大家介紹了httpclient的disableConnectionState方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • MyBatis-Plus更新對(duì)象時(shí)將字段值更新為null的四種常見方法

    MyBatis-Plus更新對(duì)象時(shí)將字段值更新為null的四種常見方法

    MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在簡化開發(fā)、提高效率方面表現(xiàn)非常出色,而,在使用 MyBatis-Plus 更新對(duì)象時(shí),默認(rèn)情況下是不會(huì)將字段值更新為 null 的,如果你需要將某些字段的值更新為 null,有幾種方法可以實(shí)現(xiàn),本文將介紹幾種常見的方法
    2024-11-11
  • 推薦幾款非常實(shí)用的IDEA插件小結(jié)

    推薦幾款非常實(shí)用的IDEA插件小結(jié)

    這篇文章主要介紹了推薦幾款非常實(shí)用的IDEA插件小結(jié),解決你開發(fā)中可望而又不好找的插件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Springboot mybatisplus如何解決分頁組件IPage失效問題

    Springboot mybatisplus如何解決分頁組件IPage失效問題

    這篇文章主要介紹了Springboot mybatisplus如何解決分頁組件IPage失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解大數(shù)據(jù)處理引擎Flink內(nèi)存管理

    詳解大數(shù)據(jù)處理引擎Flink內(nèi)存管理

    Flink是jvm之上的大數(shù)據(jù)處理引擎,jvm存在java對(duì)象存儲(chǔ)密度低、full gc時(shí)消耗性能,gc存在stw的問題,同時(shí)omm時(shí)會(huì)影響穩(wěn)定性。針對(duì)頻繁序列化和反序列化問題flink使用堆內(nèi)堆外內(nèi)存可以直接在一些場景下操作二進(jìn)制數(shù)據(jù),減少序列化反序列化消耗。本文帶你詳細(xì)理解其原理。
    2021-05-05
  • java線程池ThreadPoolExecutor實(shí)現(xiàn)原理詳解

    java線程池ThreadPoolExecutor實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了java線程池ThreadPoolExecutor實(shí)現(xiàn)原理詳解,ThreadPoolExecutor是線程池實(shí)現(xiàn)類,會(huì)動(dòng)態(tài)創(chuàng)建多個(gè)線程,并發(fā)執(zhí)行提交的多個(gè)任務(wù),需要的朋友可以參考下
    2023-12-12
  • JDK1.8下載、安裝和環(huán)境配置超詳細(xì)教程(最新最完整)

    JDK1.8下載、安裝和環(huán)境配置超詳細(xì)教程(最新最完整)

    jdk1.8是一款功能強(qiáng)大的Java語音軟件開發(fā)工具包,JDK是學(xué)好Java的第一步,本文重點(diǎn)給大家介紹JDK1.8下載、安裝和環(huán)境配置教程,需要的朋友可以參考下
    2022-11-11
  • Java實(shí)現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實(shí)例

    Java實(shí)現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實(shí)例

    本篇文章主要介紹了Java實(shí)現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實(shí)例,詳細(xì)的介紹了3種實(shí)現(xiàn)方法,有興趣的可以了解一下。
    2017-04-04
  • 如何基于SpringWeb?MultipartFile實(shí)現(xiàn)文件上傳、下載功能

    如何基于SpringWeb?MultipartFile實(shí)現(xiàn)文件上傳、下載功能

    在做項(xiàng)目時(shí),后端經(jīng)常采用上傳文件組件MultipartFile,下面這篇文章主要給大家介紹了關(guān)于如何基于SpringWeb?MultipartFile實(shí)現(xiàn)文件上傳、下載功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • java Timer測試定時(shí)調(diào)用及固定時(shí)間執(zhí)行代碼示例

    java Timer測試定時(shí)調(diào)用及固定時(shí)間執(zhí)行代碼示例

    這篇文章主要介紹了java Timer測試定時(shí)調(diào)用及固定時(shí)間執(zhí)行代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

芷江| 衡山县| 陆良县| 萝北县| 铜陵市| 阜新市| 铁岭县| 高尔夫| 额济纳旗| 新乡县| 万年县| 罗山县| 缙云县| 闸北区| 克拉玛依市| 洛扎县| 双桥区| 驻马店市| 安庆市| 东丽区| 桂平市| 池州市| 陇南市| 思南县| 屏南县| 嘉峪关市| 枝江市| 满城县| 内乡县| 平谷区| 获嘉县| 宜兰县| 红安县| 昌吉市| 杨浦区| 黔江区| 兴海县| 乌兰浩特市| 台江县| 寿阳县| 黎川县|