SpringCloud(27):授权控制实现

news2024/11/18 14:44:53

很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)判断资源访问是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

1 重要的属性

来源访问控制规则(AuthorityRule)非常简单,主要有以下配置项:

  • resource :资源名,即限流规则的作用对象。
  • limitApp :请求来源,对应的黑名单/白名单,多个用","分隔,如 appA,appB。
  • strategy :限制模式,AUTHORITY_WHITE为白名单模式,AUTHORITY_BLACK为黑名单模式,默认为白名单模式。

这里演示实现Ip地址白名单和黑名单配置规则

2 实现步骤

授权控制规则设置有两种方式

  • 本地代码设置
  • 在Sentinel控制台动态设置

3 本地代码设置

1.创建WhiteBlackController,在其中编写修改以下代码

package com.example.demo.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

@RestController
public class WhiteBlackController {
    //定义限流资源和限流讲解回调函数
    @SentinelResource(value = "Sentinel_Rule", blockHandler = "exceptionHandler")
    @GetMapping("origin")
    public String hello() {
        return "Hello Sentinel!";
    }
    // blockHandler函数,原方法调用被限流/降级/系统保护的时候调用
    public String exceptionHandler(BlockException ex) {
        ex.printStackTrace();
        return "系统繁忙,请稍候";
    }
    /**
     * 白名单设置
     *
     * @PostConstruct :在构造函数执行完毕后执行
     */
    @PostConstruct
    private static void initWhiteRules() {
        //1.创建存放授权规则的集合
        List<AuthorityRule> rules = new ArrayList<AuthorityRule>();
        //2.创建授权规则
        AuthorityRule rule = new AuthorityRule();
        //定义资源
        rule.setResource("Sentinel_Rule");
        //设置授权模式 RuleConstant.AUTHORITY_WHITE :白名单
        rule.setStrategy(RuleConstant.AUTHORITY_WHITE);
        //设置白名单
        rule.setLimitApp("192.168.1.3");
        //将授权规则添加到集合中
        rules.add(rule);
        //3.加载授权规则
        AuthorityRuleManager.loadRules(rules);
    }
    /**
     * 黑名单设置
     *
     * @PostConstruct :在构造函数执行完毕后执行
     */
    @PostConstruct
    private static void initBlackRules() {
        //1.创建存放授权规则的集合
        List<AuthorityRule> rules = new ArrayList<AuthorityRule>();
        //2.创建授权规则
        AuthorityRule rule = new AuthorityRule();
        //定义资源
        rule.setResource("Sentinel_Rule");
        //设置授权模式 RuleConstant.AUTHORITY_BLACK :黑名单
        rule.setStrategy(RuleConstant.AUTHORITY_BLACK);
        //设置黑名单
        rule.setLimitApp("127.0.0.1");
        //将授权规则添加到集合中
        rules.add(rule);
        //3.加载授权规则
        AuthorityRuleManager.loadRules(rules);
    }
}

白名单和黑名单只要配置一个就可以满足需求。

2.创建SentinelConfig,设置请求来源解析

package com.example.demo.config;

import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser;
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;

@Component
public class SentinelConfig {
    @PostConstruct
    public void init(){
        //获取请求来源ip地址
        WebCallbackManager.setRequestOriginParser(new RequestOriginParser() {
            @Override
            public String parseOrigin(HttpServletRequest httpServletRequest) {
                return httpServletRequest.getRemoteAddr();
            }
        });
    }
}

3.运行测试

通过浏览器输入http://192.168.1.3:8080/origin进行访问,则显示”Hello Sentinel”;当浏览器输入http://127.0.0.1:8080/origin,则显示”系统繁忙,请稍候”,这说明授权控制规则设置成功。

4 在Sentinel控制台动态设置

将WhiteBlackController中的代码设置授权控制规则删除,重启项目,在Sentinel控制台动态设置授权控制规则。

在Sentinel控制台的左侧菜单中选择“授权规则”,点击“新增授权规则”按钮,增加白名单或者黑名单。只用设置一个即可,设置白名单,则白名单以外的皆为黑名单,设置黑名单,则黑名单以外的都是白名单。

白名单如下:

黑名单如下:

 之后,通过浏览器输入http://192.168.1.3:8080/origin进行访问,则显示”Hello Sentinel”;当浏览器输入http://127.0.0.1:8080/origin,则显示”系统繁忙,请稍候”,这说明授权控制规

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运营-18.积分体系概念

积分体系是一种通过平台补贴来提升用户忠诚度、为平台各项业务的导流的运营手段&#xff1b; 作用 1. 积分体系可以引导用户逐渐投入沉没成本&#xff0c;包括时间、精力和金钱&#xff1b; 2. 沉没成本越高&#xff0c;用户越难以离开&#xff1b; 3. 积分体系可以给其他业务导…

数据库实训心得体会_数据库实习个人总结

数据库实训心得体会篇一一个月的数据库实训就转眼间就上完了&#xff0c;期间讲解了一个学生管理系统&#xff0c;最后还做了一个小的数据库链接作业。现在就说说关于vb链接的数据库的一些方法。 首先说数据库&#xff0c;简单的说就是建表格,然后把一张一张的表格和在一起,成为…

nginx判断访问的是不是index.html如果是且index.html存在直接返回

可以通过以下配置实现此功能&#xff1a; 复制server {listen 80;server_name example.com;root /var/www/example.com;index index.html;location / {try_files $uri $uri/ index;}location index {if (-f $document_root/index.html) {return 200;}rewrite ^ /index.html la…

Spring源码(一) — 序言

序言 Java程序员的日常开发一定都离不开Spring的框架&#xff0c;从Spring、SpringMVC、SpringBoot、SpringCloud… 而Spring框架就是Spring家族中最基础也是最重要的一个框架。 Spring 我们常说的Spring往往都绕不开IOC&#xff08;控制反转&#xff09;和AOP&#xff08;切…

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

进入到 2023 年以来&#xff0c; Zebec 生态的整体发展突飞猛进&#xff0c;除了流支付协议 Zebec Protocol 不断通过收购来扩大自身流支付业务、与万事达等合作推出 Zebec Card 等在支付业务上&#xff0c;实现进展外&#xff0c;其社区驱动的Layer3 模块化链 Nautilus Chain …

GP-NFC-Management of Multiple Secure Elements

GP_Mobile Task Force Requirements for NFC Mobile Management of Multiple Secure_Elements_v1.0.pdf 一、简介 在不久的将来&#xff0c;NFC 非接触式手机有望变得无处不在。 它们将用作支付卡、交通票、忠诚卡、访问控制徽章和许多其他非接触式服务卡。 一些试点已经在全…

CNN详细学习

前馈神经网络 常见激活函数 sigmoid函数 梯度消失与爆炸 通用逼近定理 根据通用近似定理&#xff0c;对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络 只要其隐藏层神经元的数量足够&#xff0c;它可以以任意的精度来近似任何从一个定义…

java矢量切片实现

概述 可通过多种方式实现矢量切片的制作&#xff0c;前面讲到了基于postgis数据库、tippecanoe、Qgis等方式&#xff0c;本文讲述基于spring Boot框架下java的实现。 实现效果 实现代码 后端代码 引入依赖 <dependency><artifactId>giscat-vector-mvt</art…

Microsoft Office 2021安装

哈喽&#xff0c;大家好。今天一起学习的是office2021的安装&#xff0c;有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统&#xff1a;Windows 11 支持Win10安装&#xff0c;不支持Win7、XP系统 系统类型&#xff1a;64位 演示版本&#xff1a;cn_office_…

公有云弊端尽显,“云回迁”真的来了吗?

5到10年前&#xff0c;如果一家企业制定数字化转型战略&#xff0c;那么这项战略的核心大概率是将业务迁移上云。 现在&#xff0c;多数企业的业务已在云中“开花结果”&#xff0c;与以往不同的是&#xff0c;原先的一“朵”云变成了一“片”云。 没错&#xff0c;多云战略正…

Java集合底层原理总结

文章目录 一、集合分类二、遍历集合方式三、单列集合3.1 List3.1.1 ArrayList底层分析3.1.2 LinkedList底层分析 3.2 Set3.2.1 HashSet&#xff08;无序&#xff09;底层分析3.2.2 LinkedHashSet&#xff08;有序&#xff0c;存取一致&#xff09;3.2.3 TreeSet&#xff08;可排…

[LitCTF 2023]easy_shark

下载附件解压出现密码提示 使用010editor打开&#xff0c;发现frflags和deflags都被修改了&#xff0c;这就会造成压缩包伪加密 将它们都改回0&#xff0c;另存为再打开&#xff0c;不再出现密码提示 使用wirshark打开 过滤http并追踪&#xff0c;在最后一个包里找到了类似fla…

车载以太网 - SomeIP - 协议用例 - on-wire

目录 Specification of the SOME/IP on-wire format 1.1、验证Response报文中的源IP地址为Request报文中的目标IP地址

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

搭建了基础的环境&#xff0c;配置了一个简单的工程后&#xff0c;CubeMx的基本操作就会了。然后基于这个操作往下推进&#xff0c;开始对关键模块定时器的攻略&#xff0c;这个部分需要先熟悉一下Stm32的定时器基本原理。 《STM32参考手册》中仅对定时器的介绍就已经占了100多…

C++的最后一道坎 | 百万年薪的程序员

| 导语 C 的起源可以追溯到 40 年前&#xff0c;但它仍然是当今使用最广泛的编程语言之一&#xff0c;C发明人Bjarne Stroustrup 一开始没想到 C 会获得如此大的成功&#xff0c;他说&#xff1a;“C 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标&#xff0c;就是…

用nginx实现一个直播服务—RTMP推流和HTTP-FLV拉流

目录 一、环境准备 二、安装编译nginx所需的安装包和下载nginx原代码包 三、nginx配置 四、启动nginx服务 五、测试推流和拉流服务 六、摄像头数据采集 七、查看统计 这篇文章主要记录用nginx实现直播服务&#xff0c;通过RTMP推流和通过HTTP-FLV或RTMP拉流&#xff0c;…

DJ5-4 链路层交换机

目录 一、链路层交换机 二、交换机&#xff1a;支持多节点同时传输 三、交换机&#xff1a;转发表或称交换表 四、交互机&#xff1a;自学习 1. 单个交换机自学习/转发的例子 2. 多个交换机自学习/转发的例子 五、交换机&#xff1a;数据帧的过滤/转发 六、交换机的交换…

css基础技巧

1. emmet语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>…

如何在CSDN获取更多的铁粉?

一、铁粉的定义 要想获取铁粉&#xff0c;首先我们得知道什么是铁粉&#xff0c;根据官方给出定义是下面这样的&#xff1a; 【铁粉】具体规则如下&#xff1a; 铁粉 90 天内有阅读&#xff0c;购买专栏或其他互动&#xff0c;并且原力等级 > 0 的粉丝。 也就是说你的原力…

数据结构——二叉树_(上)

学习二叉树之前我们首先要对树有一个认识&#xff0c;树是一种非线性结构&#xff0c;它是由n(n>0)个有限节点组成的一个具有层次关系的节点&#xff1b;而这个层次结构倒过来看就十分的像一棵树&#xff0c;所以起名树结构。 跟现实中的树一样&#xff0c;树结构也有一个根…