Spring Cloud Gateway的常用路由断言工厂
1)Path 路由断言工厂
Path 路由断言工厂接收一个参数,根据 Path 定义好的规则来判断访问的 URI 是否匹配。
	spring:
	  cloud:
	    gateway:
	      routes:
	        - id: host_route
	    uri: https://www.xinbaoku.com
	    predicates:
	      - Path=/blog/detail/{segment}
我们访问本地的网关:http://localhost:2001/blog/detail/36185 ,可以看到显示的是 https://www.xinbaoku.com/blog/detail/36185 对应的内容。
2)Query 路由断言工厂
Query 路由断言工厂接收两个参数,一个必需的参数和一个可选的正则表达式。
	spring:
	  cloud:
	    gateway:
	      routes:
	        - id: query_route
	      uri: https://www.xinbaoku.com
	      predicates:
	        - Query=foo, ba.
测试链接:http://localhost:2001/?foo=baz。
3)Method 路由断言工厂
Method 路由断言工厂接收一个参数,即要匹配的 HTTP 方法。
	spring:
	  cloud:
	    gateway:
	      routes:
	        - id: method_route
	  uri: http://baidu.com
	  predicates:
	    - Method=GET
4)Header 路由断言工厂
Header 路由断言工厂接收两个参数,分别是请求头名称和正则表达式。
	spring:
	  cloud:
	    gateway:
	      routes:
	        - id: header_route
	  uri: http://example.org
	  predicates:
	    - Header=X-Request-Id, \d+
如果你想学习更多路由断言工厂的用法,可以参考官方文档进行学习。
自定义路由断言工厂
自定义路由断言工厂需要继承 AbstractRoutePredicateFactory 类,重写 apply 方法的逻辑。在 apply 方法中可以通过 exchange.getRequest() 拿到 ServerHttpRequest 对象,从而可以获取到请求的参数、请求方式、请求头等信息。
apply 方法的参数是自定义的配置类,在使用的时候配置参数,在 apply 方法中直接获取使用。
命名需要以 RoutePredicateFactory 结尾,比如 CheckAuthRoutePredicateFactory,那么在使用的时候 CheckAuth 就是这个路由断言工厂的名称。代码如下所示。
@Component
public class CheckAuthRoutePredicateFactory
        extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {
    public CheckAuthRoutePredicateFactory() {
        super(Config.class);
    }
    @Override
    public Predicate<ServerWebExchange> apply(Config config) {
        return exchange -> {
            System.err.println("进入了CheckAuthRoutePredicateFactory\t" + config.getName());
            if (config.getName().equals("zhangsan")) {
                return true;
            }
            return false;
        };
    }
    public static class Config {
        private String name;
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
    }
}
使用示例如下所示:
	spring:
	  cloud:
	    gateway:
	      routes:
	  - id: customer_route
	  uri: https://www.xinbaoku.com
	  predicates:
	    - name: CheckAuth
	  args:
	    name: zhangsan
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算
