首页 > 其他分享 >SpringCloud——自定义断言工厂

SpringCloud——自定义断言工厂

时间:2023-11-28 13:14:37浏览次数:40  
标签:断言 自定义 SpringCloud org springframework AuthRoutePredicateFactory import public S

目录

    场景:用户的请求头中需要有指定的用户名和密码才能访问。

    断言工厂

    参考系统AfterRoutePredicateFactory写法。

    package com.zjw.factory;
    
    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
    import org.springframework.http.HttpHeaders;
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.function.Predicate;
    
    /**
     * @since 2023/11/28 12:09
     */
    @Component
    public class AuthRoutePredicateFactory extends AbstractRoutePredicateFactory<AuthRoutePredicateFactory.Config> {
    
        /**
         * DateTime key.
         */
        public static final String USER_NAME_KEY = "username";
        public static final String PASS_WORD_KEY = "password";
    
        public AuthRoutePredicateFactory() {
            super(AuthRoutePredicateFactory.Config.class);
        }
    
    
        /**
         * 认证校验逻辑
         */
        @Override
        public Predicate<ServerWebExchange> apply(AuthRoutePredicateFactory.Config config) {
            return serverWebExchange -> {
                // 获取到请求中的所有header
                HttpHeaders headers = serverWebExchange.getRequest().getHeaders();
                // 校验header中是否包含用户名和密码,如果包含,返回true,否则返回false
                List<String> pwdList = headers.get(config.getUsername());
                return pwdList != null && pwdList.contains(config.getPassword());
            };
        }
    
        @Getter
        @Setter
        public static class Config {
            private String username;
            private String password;
        }
    
        @Override
        public List<String> shortcutFieldOrder() {
            return Arrays.asList(USER_NAME_KEY, PASS_WORD_KEY);
        }
    }
    

    application.yml

    server:
      port: 9001
    
    spring:
      application:
        name: depart-consumer # 微服务名称
      cloud:
        gateway:
          routes:
            # 自定义断言工厂
            - id: custom_auth_route
              uri: http://localhost:8081
              predicates:
                - Auth=zhangsan, 123
    

    请求头需要有zhangsan,值为123才能访问资源。

    标签:断言,自定义,SpringCloud,org,springframework,AuthRoutePredicateFactory,import,public,S
    From: https://www.cnblogs.com/zjw-blog/p/17861697.html

    相关文章

    • 【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验
      一、自定义算子工程介绍与创建自定义算子工程是一个包含用户编写的host侧和kerne|侧算子实现文件的,用于编译和安装自定义算子run包的工程框架。CANN软件包中提供了工程创建工具msopgen,开发者可以输入算子原型定义文件生成AscendC算子开发工程。需要编写AddCustom算子的原型定义......
    • 内核模块开发入门指南:在CentOS 7上实现自定义功能
      内核模块开发入门指南:在CentOS7上实现自定义功能在CentOS7及其他Linux系统中,内核模块是一种动态加载到内核中的代码,用于扩展内核的功能。内核模块的开发允许开发者在不重新编译内核的情况下,添加新的功能、驱动或调整系统行为。本文将带你入门内核模块的开发,在CentOS7上实现自......
    • 自定义标签和过滤器
      1自定义过滤器 -第一步:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag-第二步:在app中创建templatetags包(包名只能是templatetags,不能改)-第三步:在包内,新建py文件(如:my_tags.py)-第四步:写代码(过滤器) fromdjangoimporttemplate......
    • 直播系统app源码,自定义可以暂停的倒计时
      直播系统app源码,自定义可以暂停的倒计时用到的抽象类: publicabstractclassTimerListener{  /**   *当倒计时开始   */  publicvoidonStart(){  }  /**   *当倒计时恢复暂停   */  publicvoidonResume(){  }  /**  ......
    • app直播源码,uniapp之自定义顶部样式
      app直播源码,uniapp之自定义顶部样式 //需要自定义顶部样式的页面配置{"path":"pages/case/index","style":                                           {  "navigationBarTitleT......
    • Vue中自定义组件监听事件传参
      自定义数字框组件如下<template><divclass="count-box"><button@click="handleSub"class="minus">-</button><input:value="value"@change="handleChange"class="inp"typ......
    • PIP换源_Pycharm快捷键_自定义文件头模板
      【一】PIP更换国内源永久换源打开控制台或终端,并输入以下命令:pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple/更改pip源后,可以通过以下命令验证:pipconfiggetglobal.index-url如果返回值为https://mirrors.aliyun.com/pypi/simple/,则表......
    • socket.on可以直接添加自定义事件吗,理解socket的事件触发与响应
      在Web开发中,socket.on通常是用于注册处理特定事件的回调函数的方法。它主要用于处理Socket.IO库中的预定义事件,例如"connect"、"disconnect"、"message"等。然而,Socket.IO也允许你添加自定义事件,以便在客户端和服务器之间进行自定义的双向通信。要使用socket.on来处理自定义事件,......
    • 函数中的库函数与自定义函数
      1.函数是什么:在计算机科学中,子程序也就是函数,是一个大型程序中的某部分代码,由一个或多个语句组成。负责完成某项特定任务,而且相对于其他代码,具有相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库。2.库函数举例:lo函数字符串操作函......
    • Java开发者的Python快速进修指南:自定义模块及常用模块
      好的,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处。Python使用import语句来导入包,而Java也是如此。然而,两者之间的区别在于Python没有类路径的概念,它直接使用.py文件的文件名作为导入路径,并将其余的工作交给Python解释器来扫描和处理。另......