南通网站外包,网站建设的简介,网站制作网站建设单位,对电子商务网站建设与维护的总结假设我们的分布式项目#xff0c;admin是8087#xff0c;gateway是8088#xff0c;consumer是8086
我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目#xff0c;那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以#xff1…假设我们的分布式项目admin是8087gateway是8088consumer是8086
我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以
所以我们会有个黑白名单来源控制来对这种特殊情况做处理
不用sentinel的做法
我们在网关那在转发请求的时候一个请求头请求头的值固定
然后这个请求头相当于密钥我们不会对外暴露然后在java代码的拦截器中我们拦截请求判断这个请求头是否和配置一样
优点简单
缺点我们要是请求头泄漏我们发起请求的时候可以伪造请求头这样子我们仍然能跨网关访问
用Sentinel的做法
sentinel请求头判断来源做法
控制调用方
把我们的调用方分为白名单和黑名单 我们要的名称其实是origin RequestOriginParser接口
我们的sentinel是通过这个接口里的parseOrigin这个方法来获取请求的来源的
这个方法的作用就是从我们的request对象中解析出我们的origin的值 可惜默认情况下这个方法返回的结果是default 如果不为空那我们就把我们的origin作为请求头返回 如果浏览器获得的origin头和网关获取的请求头不一样那他们的来源名称就不一样 这样子我们就可以来编写我们的规则了 区分请求是否经过网关 然后我们的网关有一个过滤器 请求头的名字是origin然后值是gateway 这样我们从网关过来的就有请求头然后不是从网关过来的就没有请求头 之前如果我们知道正确的url我们甚至可以绕过网关进行访问这样子一点都不安全 实现步骤
连接RequestOriginParser接口
然后我们把它注册成一个bean 为网关添加过滤器 看到没我们网关配置的请求头的origin的值是gateway 总结 我们的sentinel是用这个方法来获取我们的请求来源的
你看我们的返回值是String我们就通过这个String来判断我们的请求来源
我们默认请求头有origin这个参数
因为我们配置从网关来的我们的origin的参数时gateway 添加授权 我们刚刚的那个方法返回的参数就是我们的来源的名称
然后填写我们的来源名称 我们用8088端口绕过网关发现不行 sentinel限制IP做法 在业务服务中配置 Sentinel 的 IP 限制规则只允许网关的 IP 访问。 这种方式适用于网关和服务部署在同一内网环境的情况。
实现步骤 获取网关的 IP 假设网关的 IP 是 192.168.1.100。 配置 Sentinel 规则 在业务服务中配置 Sentinel 的白名单规则只允许网关的 IP 访问。 import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
import java.util.Collections;Configuration
public class SentinelAuthorityRuleConfig {/*** 配置 Sentinel 的 IP 白名单规则*/PostConstructpublic void initAuthorityRule() {// 创建 AuthorityRule 规则AuthorityRule rule new AuthorityRule();rule.setResource(gateway_ip_whitelist); // 资源名称rule.setStrategy(RuleConstant.AUTHORITY_WHITE); // 白名单模式rule.setLimitApp(192.168.1.100); // 只允许 Gateway 的 IP 访问// 加载规则AuthorityRuleManager.loadRules(Collections.singletonList(rule));}
}
3.业务服务层 在业务服务中启用 Sentinel 的流控功能确保只有网关的请求可以通过 Gateway 的 IP
情况说明如果 Gateway 没有进行特殊的配置来传递客户端 IP 信息那么后端服务接收到的请求中的 IP 地址通常是 Gateway 的 IP 地址。实现方式这是比较常见的默认情况例如一些简单的网络代理服务器在转发请求时如果没有专门设置修改请求头中的 IP 相关信息后端服务器就只能看到代理服务器即 Gateway的 IP 地址因为在网络数据包传输过程中源 IP 地址会被替换为 Gateway 的出口 IP 地址。 如果我们要保留之前的客户端请求的IP我们要在Gateway做额外处理