Sentinel——授权规则
授权规则
授权规则是一种通过对请求来源进行甄别的鉴权规则。规则规定了哪些请求可以通过访问,而哪些请求则是被拒绝访问的。而这些请求的设置是通过黑白名单来完成的。
无论是黑名单还是白名单,其实就是一个请求来源名称列表。出现在来源黑名单中的请求将被拒绝访问,而其它来源的请求则可以正常访问;出现在来源白名单中的请求是可以正常访问的,而其它来源的请求则将被拒绝。
controller
package com.zjw.controller;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.zjw.domain.Depart;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* <p>
* 部门表 前端控制器
* </p>
*
* @since 2023-11-20
*/
@RestController
@RequestMapping("/depart")
@Slf4j
public class DepartController {
@Resource
private RestTemplate restTemplate;
private static final String PROVIDER_URL = "http://depart-provider/depart";
/**
* 根据id查询部门
*/
//发生异常会降级,调用getFallBack方法, 触发流控,会调用流控的getFlowFallBack方法
@SentinelResource(value = "get", fallback = "getFallBack", blockHandler = "getFlowFallBack")
@GetMapping("/get/{id}")
public Depart get(@PathVariable Long id) {
return restTemplate.getForObject(PROVIDER_URL + "/get/" + id, Depart.class);
}
/**
* 服务流控使用的方法.
* 需要指定BlockException参数,否则调用降级方法
*/
public Depart getFlowFallBack(Long id, BlockException e) {
log.info("id = " + id);
log.info("exception = " + e.getMessage());
Depart depart = new Depart();
depart.setId(id);
depart.setName("flow fall back");
return depart;
}
/**
* 服务降级使用的方法
*/
public Depart getFallBack(Long id, Throwable t) {
log.info("id = " + id);
log.info("throwable = " + t.getMessage());
Depart depart = new Depart();
depart.setId(id);
depart.setName("no this depart");
return depart;
}
/**
* 查询所有部门
*/
@SuppressWarnings("unchecked")
@SentinelResource(value = "list")
@GetMapping("/list")
public List<Depart> list() {
return (List<Depart>)restTemplate.getForObject(PROVIDER_URL + "/list", List.class);
}
}
解析请求来源
package com.zjw.parser;
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
* 解析请求来源
* @since 2023/12/04 18:33
*/
@Component
@Slf4j
public class DepartRequestOriginParser implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest request) {
String source = request.getParameter("source");
if(!StringUtils.hasText(source)){
//设置为默认来源
source = "guest";
}
log.info("source = " + source);
return source;
}
}
控制台设置规则
sentinel控制台设置授权规则

当请求来源为vip,1,2的进行放行。
API设置规则
package com.zjw;
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.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.ArrayList;
import java.util.List;
@SpringBootApplication
public class ConsumerAuthRule8080Application {
public static void main(String[] args) {
SpringApplication.run(ConsumerAuthRule8080Application.class, args);
//初始化授权规则
initRule();
}
private static void initRule() {
AuthorityRuleManager.loadRules(configAuthRule());
}
// 设置授权规则
private static List<AuthorityRule> configAuthRule() {
List<AuthorityRule> ruleList = new ArrayList<>();
AuthorityRule rule = new AuthorityRule();
// 资源名
rule.setResource("get");
// 针对来源
rule.setLimitApp("vip,1,2");
// 设置白名单
rule.setStrategy(RuleConstant.AUTHORITY_WHITE);
ruleList.add(rule);
return ruleList;
}
}
效果和在sentinel控制台设置的一样。
Sentinel——授权规则的更多相关文章
- FTP中的授权规则
在授权规则中,你可以管理自己的FTP站点以怎样的方式进行访问,比如每个进入站点的人都需要输入用户名密码.正则可以在授权规则中删除默认的配置“允许匿名用户读取”的规则. 也可以在此处,对不同的组或用户进 ...
- Sentinel Dashboard 规则 持久化到Nacos
本篇文章基于sentinel1.8.4版本进行改造的.本篇主要记录改造步骤 1.下载源码 https://github.com/alibaba/Sentinel 2.打开下载的sentinel,到se ...
- App分享之微信微博等各个社交平台的分享授权规则和常见问题
一.新浪微博分享规则 新浪微博支持分享类型: 应用内分享也就是网页分享支持: 文字,文字+图片,要分享链接需要链接添加在text里分享 客户端分享支持:文字,图片,文字+图片,图片+文字+链接 参数说 ...
- [Spring-Cloud-Alibaba] Sentinel 规则持久化
在之前的练习中,只要应用重启,就需要重新配置,这样在我们实际的项目是非常不实用的,那么有没有办法把我们配置的规则保存下来呢?答案是YES,那么接下来,给大家来介绍如何将Sentinel规则持久化. D ...
- Sentinel Client: 整合Apollo规则持久化
在前面的学习过程中,Sentinel 的规则,也就是我们之前定义的限流规则,是通过代码的方式定义好的.这是初始化时需要做的事情,Sentinel 提供了基于API的方式修改规则: FlowRuleMa ...
- Spring Cloud Alibaba学习笔记(7) - Sentinel规则持久化及生产环境使用
Sentinel 控制台 需要具备下面几个特性: 规则管理及推送,集中管理和推送规则.sentinel-core 提供 API 和扩展接口来接收信息.开发者需要根据自己的环境,选取一个可靠的推送规则方 ...
- Spring Cloud Alibaba学习笔记(5) - 整合Sentinel及Sentinel规则
整合Sentinel 应用整合Sentinel 在dependencies中添加依赖,即可整合Sentinel <dependency> <groupId>com.alibab ...
- Spring Cloud Alibaba基础教程:Sentinel使用Nacos存储规则
通过上一篇<使用Sentinel实现接口限流>的介绍,相信大家对Sentinel已经有了初步的认识.在Spring Cloud Alibaba的整合封装之下,接口限流这件事情可以非常轻易的 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则 前面几篇文章较为详细的介绍了Sentinel的使用姿势,还没看过的小伙伴可以访问以下链接查看: &l ...
- Sentinel Dashboard(基于1.8.1)流控规则持久化到Nacos——涉及部分Sentinel Dashboard源码改造
前言 之前虽然也一直在使用sentinel实现限流熔断功能,但却没有好好整理之前看的源码与资料,今天有时间将之前自己整理过的资料写成一篇博文,或者是是一篇关于Sentinel(基于目前最近版本1.8, ...
随机推荐
- Q:windows server2019由于没有远程桌面授权服务器可以提供许可证,远程回话连接已断开
由于没有远程桌面授权服务器可以提供许可证,远程回话连接已断开,请跟服务管理员联系 原因是服务器安装了远程桌面服务RemoteApp,这个是需要授权的.但是微软官方给予了120天免授权使用,超过120天 ...
- Hive表误删恢复
一.简介 因hive表删除后,hdfs文件会先放入回收站,定期清理回收站.在回收之前可以进行清理数据 二.恢复步骤 2.1 看表存储是否损坏select type from dw.ods_test1 ...
- CentOS7安装RabbitMQ (安装包安装)
环境: CentOS7 需要安装:erlang 22.2 rabbitmq 3.8.3 参考: rabbit官网地址:http://www.rabbitmq.com/which-erlang.htm ...
- 清华大学推出第三讲普通人如何抓住 DeepSeek 红利,普通人必备的免费AI手册!
前言 在当今这个日新月异的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活.工作和社会结构.从智能手机上的语音助手到自动驾驶汽车,从医疗诊断到学术研究,AI的应用无处不在,它如同一股不可阻 ...
- C#实现文件的压缩和解压缩
原文链接:https://www.cnblogs.com/sunyaling/archive/2009/04/13/1434602.html 在C#中实现文件的压缩和解压缩,需要使用第三方的组建完成. ...
- Dev Express WPF 在当前界面显示进度加载等待信息
执行耗时任务时,为提高用户体验,一般会添加进度状态信息.Dev Express 的 LoadingDecorator 可以实现在当前界面中显示进度信息. 效果图如下: 默认 LoadingDecora ...
- nginx 强制https
nginx 强制https 通常有如下两种方法强制https推荐第二种,第二种更高效1.使用nginx的rewrite方法 server { listen 80; server_name xxx. ...
- 特征转换之python代码
一.连续型变量1.1 连续变量无量纲化(1)无量纲化: 使不同规格尺度的数据转化统一规格尺度(将数据单位统一)(2)无量纲化方法:标准化, 区间所方法 标准化: 将连续性变量转变为 均值0 标准差1 ...
- 如何基于大语言模型和MaxKB实现PPT自动生成方案
一.实现方案 利用讯飞大模型智能 PPT 生成接口实现,具体参见:讯飞开放平台智能PPT生成 https://www.xfyun.cn/services/aippt#anchor4503211 二.新 ...
- RedisTemplate实现setnx分布式锁
redis工具类 `package com.ttsx.activity.item.services.utils; import lombok.extern.slf4j.Slf4j; import or ...