我是靠谱客的博主 直率冷风,最近开发中收集的这篇文章主要介绍微服务保护sentinel授权规则一.授权规则二.自定义异常处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.授权规则

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

白名单:来源(origin)在白名单内的调用者允许访问
黑名单:来源(origin)在黑名单内的调用者不允许访问

在这里插入图片描述

例如,我们限定只允许从网关来的请求访问order-service,那么流控应用中就填写网关的名称。

Sentinel是通过RequestOriginParser这个接口的parseOrigin来获取请求的来源的。

public interface RequestOriginParser {   
 /**  
 * 从请求request对象中获取origin,获取方式自定义
*/
String parseOrigin(HttpServletRequest request);
}

例如,我们尝试从request中获取一个名为origin的请求头,作为origin的值:

@Componentpublic class HeaderOriginParser implements RequestOriginParser { 
   @Override    
   public String parseOrigin(HttpServletRequest request) {
           String origin = request.getHeader("origin");     
              if(StringUtils.isEmpty(origin)){           
               return "blank";      
                 }       
              return origin;   
      }
  }

我们还需要在gateway服务中,利用网关的过滤器添加名为gateway的origin头:

spring:  
	cloud:    
		gateway:      
			default-filters:       
			 - AddRequestHeader=origin,gateway # 添加名为origin的请求头,值为gateway

给/order/{orderId} 配置授权规则:

在这里插入图片描述

二.自定义异常处理

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

/**     
* 处理请求被限流、降级、授权拦截时抛出的异常:BlockException     
**/
@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 + "}");
    }
}

最后

以上就是直率冷风为你收集整理的微服务保护sentinel授权规则一.授权规则二.自定义异常处理的全部内容,希望文章能够帮你解决微服务保护sentinel授权规则一.授权规则二.自定义异常处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(219)

评论列表共有 0 条评论

立即
投稿
返回
顶部