微服务框架

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

微服务保护


文章目录

  • 微服务框架
  • 微服务保护
  • 33 授权规则
  • 33.1 授权规则
  • 33.1.1 授权规则


33 授权规则

33.1 授权规则
33.1.1 授权规则

看看sentinel 的控制台

java中白名单网段校验 spring security 白名单规则_微服务

系统规则是对当前应用所在的服务器的一种保护,这个保护规则只对Linux 系统有效,【黑马老师教学也用的Windows ,就不进行深入学习了】

【授权规则】

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

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

java中白名单网段校验 spring security 白名单规则_架构_02

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

java中白名单网段校验 spring security 白名单规则_spring cloud_03

【请求来源】

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

java中白名单网段校验 spring security 白名单规则_sentinel_04

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

java中白名单网段校验 spring security 白名单规则_spring cloud_05

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

java中白名单网段校验 spring security 白名单规则_spring cloud_06

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

java中白名单网段校验 spring security 白名单规则_sentinel_07

试试

【自定义 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;
    }
}

java中白名单网段校验 spring security 白名单规则_java中白名单网段校验_08

OK

【给网关添加头】

default-filters:
  - AddRequestHeader=Truth,Itcast is freaking awesome!
  - AddRequestHeader=origin,gateway

java中白名单网段校验 spring security 白名单规则_sentinel_09

OK,重启网关和order 服务

java中白名单网段校验 spring security 白名单规则_spring cloud_10

OK,先“激活一下链路”

java中白名单网段校验 spring security 白名单规则_java中白名单网段校验_11

打开sentinel 控制台刷新

java中白名单网段校验 spring security 白名单规则_spring cloud_12

添加授权规则

java中白名单网段校验 spring security 白名单规则_架构_13

直接新增

java中白名单网段校验 spring security 白名单规则_sentinel_14

OK。

现在进行测试,如果从8088 端口直接访问order 服务,相当于是绕过了 网关

java中白名单网段校验 spring security 白名单规则_架构_15

现在就会直接报错了

如果通过网关访问

java中白名单网段校验 spring security 白名单规则_架构_16

可以看到报了 401,这是因为我们在网关中加了权限校验【之前的东西 了】

java中白名单网段校验 spring security 白名单规则_架构_17

把校验加上

java中白名单网段校验 spring security 白名单规则_微服务_18

这样就没问题了

如果从8088 直接访问103 和102 一样的

java中白名单网段校验 spring security 白名单规则_sentinel_19

这就是授权规则