zuul网关传统路由配置正向代理

很多时候我们都会把zuul网关作为各种应用系统后端的所有请求的前门,对接收的所有请求进行过滤然后再转发到各个各种应用系统,其中路由便是zuul网关转发请求的关键。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

zuul的路由有两种路由:

1、传统路由:路由规则映射具体的url路径

2、面向服务路由:路由规则映射到服务发现的服务ID(serviceId),如下:

zuul:
  routes:
    demo1: #传统路由
      path: /demo1/**
      url: http://localhost:8000/
      stripPrefix: true
    demo2: #面向服务路由
      path: /demo2/**
      serviceId: demo2
      stripPrefix: true

目前碰到了这么一个需求,某系统url需要通过传统路由需要通过正向代理才能访问到。

解决方法,重写spring-cloud-netfix-zuul包中的SimpleHostRoutingFilter类的CloseableHttpClient newClient() 方法,代码如下:

protected CloseableHttpClient newClient() {
        final RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(
                        this.hostProperties.getConnectionRequestTimeoutMillis())
                .setSocketTimeout(this.hostProperties.getSocketTimeoutMillis())
                .setConnectTimeout(this.hostProperties.getConnectTimeoutMillis())
                .setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
        //添加正向代理
        SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner(new ProxySelector() {
            @Override
            public List<Proxy> select(URI uri) {
                ArrayList<Proxy> noProxies = new ArrayList<>();//设置不需要正向代理
                noProxies.add(Proxy.NO_PROXY);
                ArrayList<Proxy> proxies = new ArrayList<>();//设置需要正向代理
                int port= 8000;//端口号
                String ip = "";//正向代理地址
                proxies.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ip,port)));
                //自定义判断条件,根据条件返回是否需要正向代理
                if (true){
                    return noProxies;
                }
                return proxies;
            }

            @Override
            public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
                log.error("connectFailed 的uri" + uri);
            }
        });
        return httpClientFactory.createBuilder().setDefaultRequestConfig(requestConfig)
                .setRoutePlanner(routePlanner)
                .setConnectionManager(this.connectionManager).disableRedirectHandling()
                .build();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值