码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 微服务框架 SpringCloud微服务架构 8 Gateway 网关 8.5 全局过滤器


    微服务框架

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

    SpringCloud微服务架构

    文章目录

        • 微服务框架
        • SpringCloud微服务架构
        • 8 Gateway 网关
          • 8.5 全局过滤器
            • 8.5.1 全局过滤器 GlobalFilter
            • 8.5.2 案例
            • 8.5.3 总结

    8 Gateway 网关

    8.5 全局过滤器
    8.5.1 全局过滤器 GlobalFilter

    全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。

    【这个跟default 不是一样的吗?】

    区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。

    定义方式是实现GlobalFilter接口。

    在这里插入图片描述

    【行吧】

    8.5.2 案例

    定义全局过滤器,拦截并判断用户身份

    需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

    • 参数中是否有authorization,
    • authorization参数值是否为admin

    如果同时满足则放行,否则拦截

    直接开干!

    先来一个过滤器类

    package cn.itcast.gateway;
    
    import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    import org.springframework.cloud.gateway.filter.GlobalFilter;
    import org.springframework.core.Ordered;
    import org.springframework.core.annotation.Order;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.server.reactive.ServerHttpRequest;
    import org.springframework.stereotype.Component;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.server.ServerWebExchange;
    import reactor.core.publisher.Mono;
    
    /**
     * ClassName: AuthorizeFilter
     * date: 2022/10/29 16:56
     *
     * @author DingJiaxiong
     */
    
    //@Order(-1) //过滤器执行顺序,越小优先级越高
    @Component
    public class AuthorizeFilter implements GlobalFilter, Ordered {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    
            //1. 获取请求参数
            ServerHttpRequest request = exchange.getRequest();
            MultiValueMap<String, String> params = request.getQueryParams();
            //2. 获取参数中的authorization 参数
    
            String auth = params.getFirst("authorization");
    
            //3. 判断参数值是否等于admin
            if ("admin".equals(auth)){
                //4. 是,放行
                return chain.filter(exchange);
            }
    
            //5. 否,拦截
            //5.1 设置状态码
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            //5.2 拦截请求
            return exchange.getResponse().setComplete();
    
        }
    
        @Override
        public int getOrder() {
            return -1; //这样也是一样的道理,设置过滤器优先级
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    OK,这样过滤器就算定义好了,直接重启网关服务

    在这里插入图片描述

    OK,直接测试

    在这里插入图片描述

    可以看到直接访问,就是401

    加上参数

    在这里插入图片描述

    没毛病

    试试错误的参数

    在这里插入图片描述

    也是401 ,没毛病!

    在这里插入图片描述

    8.5.3 总结
    • 全局过滤器的作用是什么?

    对所有路由都生效的过滤器,并且可以自定义处理逻辑

    • 实现全局过滤器的步骤?

    ①实现GlobalFilter接口

    ②添加@Order注解或实现Ordered接口【过滤器一定要有顺序、不然执行结果可能会和预想的不一样】

    ③编写处理逻辑

  • 相关阅读:
    Transformer貌似也是可以使用state递归解码和训练的
    Scala基础语法入门(三)Scala中的各种运算符
    大数据培训之RDD编程模型
    信号类型(雷达)——雷达波形认识(一)
    【C++项目实现】推箱子
    《向量数据库指南》——向量数据库是小题大作的方案?
    JAVA毕业设计家乡旅游文化推广网站计算机源码+lw文档+系统+调试部署+数据库
    架构的演进
    html web前端,点击发送验证码,按钮60秒倒计时
    Python人工智能学习路线(万字长文)
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/128143331
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号