微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
微服务保护
文章目录
- 微服务框架
- 微服务保护
- 33 授权规则
- 33.1 授权规则
- 33.1.1 授权规则
33 授权规则
33.1 授权规则
33.1.1 授权规则
看看sentinel 的控制台
系统规则是对当前应用所在的服务器的一种保护,这个保护规则只对Linux 系统有效,【黑马老师教学也用的Windows ,就不进行深入学习了】
【授权规则】
授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。
- 白名单:来源(origin)在白名单内的调用者允许访问
- 黑名单:来源(origin)在黑名单内的调用者不允许访问
例如,我们限定只允许从网关来的请求访问order-service,那么流控应用中就填写网关的名称
【请求来源】
Sentinel是通过RequestOriginParser这个接口的parseOrigin来获取请求的来源的。
例如,我们尝试从request中获取一个名为origin的请求头,作为origin的值:
我们还需要在gateway服务中,利用网关的过滤器添加名为gateway的origin头:
给/order/{orderId} 配置授权规则:
试试
【自定义 RequestOriginParser】
package cn.itcast.order.sentinel;
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
/**
* ClassName: HeaderOriginParser
* date: 2022/11/6 14:04
*
* @author DingJiaxiong
*/
@Component
public class HeaderOriginParser implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest httpServletRequest) {
//1. 获取请求头
String origin = httpServletRequest.getHeader("origin");
//2. 非空判断
if (StringUtils.isEmpty(origin)){
origin = "blank";
}
return origin;
}
}
OK
【给网关添加头】
default-filters:
- AddRequestHeader=Truth,Itcast is freaking awesome!
- AddRequestHeader=origin,gateway
OK,重启网关和order 服务
OK,先“激活一下链路”
打开sentinel 控制台刷新
添加授权规则
直接新增
OK。
现在进行测试,如果从8088 端口直接访问order 服务,相当于是绕过了 网关
现在就会直接报错了
如果通过网关访问
可以看到报了 401,这是因为我们在网关中加了权限校验【之前的东西 了】
把校验加上
这样就没问题了
如果从8088 直接访问103 和102 一样的
这就是授权规则