开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:授权规则】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11878
授权规则
内容介绍:
一、课题引入
二、流控应用填写
三、编写请求
四、区分来源
一、课题引入
根据调用微服务来源判断该次请求是否允许放行,举例说明:微服务 A,B,C ,A 和 B 都会调用 C ,以 C 为主要微服务,那么 A 和 B 就是 C 的请求来源,假设 A 来源的请求全部通过, B 来源的请求全部禁止,这就是根据来源决定是否放行请求。
可知使用 Sentinel 的来源访问控制的功能。来源访问控制根据资源请求来源 (origin) 限制资源是否通过。“是否通过”采用以下两种形式:
l 若选择白名单:则只有请求来源位于白名单内时才能通过;
l 若选择黑名单:则请求来源位于黑名单时不通过,其余请求均通过
上图的资源名和授权类型易理解。
二、流控应用填写:
流控应用一栏需填写来源标识, Sentinel 提供 “Request Origin Parser” (请求来源处理)接口来处理来源。只要 Sentinel 保护的接口资源被访问, Sentinel 就会调用 Request Origin Parser 的实现类去解析访问来源。
演示如下:
假设如图是 C 为 order 微服务, A 为 pc 端, B为 app 端。只有pc 端可以访问,其余均不可以,要想填写流控应用,则 pc,app 访问必须传递一个参数命名为 “serviceName” ,根据 “serviceName” 进行判断。
具体编写如下:
①编写:找到 config 选择 Refactor
②在 config 里找到 New 选择 Java Class ,弹出窗口在 Name 一栏输入 RequestOriginParserDefinition(定义) 点击确定。
③执行命令,实现 RequestOriginParser 。
package com.itheima.config;
import com.alibaba.csp.sentinel.adpter.servlet.callback.RequestOriginParser;
import org.apache. commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public calss RequestOriginParserDefinition implements RequestOriginParser {
//定义区分来源:本质作用是通过 request 域获取到来源标识
//app pc
//然后 交给流控应用 位置进行匹配
@Override
public String parseOrigin(HttpServletRequest request) {
String serviceName = request . getParameter (s: “serviceName”);
if (StringUtils.isEmpty(serviceName)) {
throw new RuntimeException(“serviceName is not empty”);
}
return serviceName;
}
命令编写完毕进行保存。
三、编写请求
打开浏览器,新建网页,然后在最上方进行输入网址”
http://localhost:8091/order/message1?serviceName=app”
回车执行,结果是可以访问,
通过 throw new RuntimeException(“serviceName is not empty”);
这个位置可以找到 serviceName 这个来源。
四、区分来源
找到 Sentinel 控制台1.7.0中左侧列表栏的簇点链路中的/order/message1 ,点击授权,在流程应用中输入 pc ,授权类型选择白名单,再次访问,结果可以成功访问,访问 app 被限制。
若采用黑名单,流程应用中输入 pc ,其他请求均可通过,再次执行访问,结果 app 被限制, pc 可以访问。