Sentinel1.7.0自定义限流返回的页面

默认在触发限流策略后,系统会显示:

根据该关键字,在项目中进行查找,找到了该类:

接着一步一步的查找,

类:

FilterUtil
private static void writeDefaultBlockedPage(HttpServletResponse response) throws IOException {
    PrintWriter out = response.getWriter();
    out.print(DEFAULT_BLOCK_MSG);
    out.flush();
    out.close();
}

 com.alibaba.csp.sentinel.adapter.servlet.util.FilterUtil

public static void blockRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
    StringBuffer url = request.getRequestURL();

    if ("GET".equals(request.getMethod()) && StringUtil.isNotBlank(request.getQueryString())) {
        url.append("?").append(request.getQueryString());
    }

    if (StringUtil.isBlank(WebServletConfig.getBlockPage())) {
        writeDefaultBlockedPage(response);
    } else {
        String redirectUrl = WebServletConfig.getBlockPage() + "?http_referer=" + url.toString();
        // Redirect to the customized block page.
        response.sendRedirect(redirectUrl);
    }
}

最终定位到了:

public class DefaultUrlBlockHandler implements UrlBlockHandler {

    @Override
    public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException ex)
        throws IOException {
        // Directly redirect to the default flow control (blocked) page or customized block page.
        FilterUtil.blockRequest(request, response);
    }
}

因此,很容易了解到,sentinel默认采用了DefaultUrlBlockHandler类做统一的默认异常处理。

所以,要向定义特殊的限流异常页面,可以简单的通过实现UrlBlockHandler接口,来定义属于自身的特殊异常处理界面。

如:

@Component
public class CustomUrlBlockHandler implements UrlBlockHandler {
    @Override
    public void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws IOException {
        httpServletResponse.setHeader("Content-Type","application/json;charset=UTF-8");
        String message="{\"code\":999,\"msg\":\"访问人数太多,限流\"}";
        httpServletResponse.getWriter().write(message);
    }
}

启动工程后的运行效果:

可以看出,修改已经生效。

另外,新版的sentinel中已经发生了变化,可以采用这种方式来进行修改:

FlowException //限流异常
DegradeException //降级异常
ParamFlowException //参数限流异常
SystemBlockException //系统负载异常
AuthorityException //授权异常

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值