routing zuul_zuul自定义SimpleHostRoutingFilter
序
zuul的SimpleHostRoutingFilter主要用来转发不走eureka的proxy,里头是使用httpclient来转发请求的,但是有时候我们需要改动相关httpclient的配置,这个时候,就需要修改SimpleHostRoutingFilter了,这里讲一下如何扩展SimpleHostRoutingFilter。
自定义SimpleHostRoutingFilter
比如把httpclient的CookieSpec设置为default,比如把SSLContext升级为TLSv1.2
public class CustomHostRoutingFilter extends SimpleHostRoutingFilter{
private static final Logger LOGGER = LoggerFactory.getLogger(CustomHostRoutingFilter.class);
@Value("${zuul.host.socket-timeout-millis}")
int SOCKET_TIMEOUT;
@Value("${zuul.host.connect-timeout-millis}")
int CONNECTION_TIMEOUT;
private ZuulProperties.Host hostProperties;
private boolean sslHostnameValidationEnabled;
private PoolingHttpClientConnectionManager connectionManager;
public CustomHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties properties) {
super(helper, properties);
this.sslHostnameValidationEnabled = properties.isSslHostnameValidationEnabled();
this.hostProperties = properties.getHost();
LOGGER.error("CustomHostRoutingFilter init");
}
@Override
protected CloseableHttpClient newClient() {
final RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(SOCKET_TIMEOUT)
.setConnectTimeout(CONNECTION_TIMEOUT)
// 这里改为default
.setCookieSpec(CookieSpecs.DEFAULT).build();
HttpClientBuilder httpClientBuilder = HttpClients.custom();
if (!this.sslHostnameValidationEnabled) {
httpClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);
}
return httpClientBuilder.setConnectionManager(newConnectionManager())
.disableContentCompression()
.useSystemProperties().setDefaultRequestConfig(requestConfig)
.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
.setRedirectStrategy(new RedirectStrategy() {
@Override
public boolean isRedirected(HttpRequest request,
HttpResponse response, HttpContext context)
throws ProtocolException {
return false;
}
@Override
public HttpUriRequest getRedirect(HttpRequest request,
HttpResponse response, HttpContext context)
throws ProtocolException {
return null;
}
}).build();
}
@Override
protected PoolingHttpClientConnectionManager newConnectionManager() {
try {
// 这里改为TLS
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates,
String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates,
String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
} }, new SecureRandom());
RegistryBuilder registryBuilder = RegistryBuilder
. create()
.register(HTTP_SCHEME, PlainConnectionSocketFactory.INSTANCE);
if (this.sslHostnameValidationEnabled) {
registryBuilder.register(HTTPS_SCHEME,
new SSLConnectionSocketFactory(sslContext));
}
else {
registryBuilder.register(HTTPS_SCHEME, new SSLConnectionSocketFactory(
sslContext, NoopHostnameVerifier.INSTANCE));
}
final Registry registry = registryBuilder.build();
this.connectionManager = new PoolingHttpClientConnectionManager(registry, null, null, null,
hostProperties.getTimeToLive(), hostProperties.getTimeUnit());
this.connectionManager
.setMaxTotal(this.hostProperties.getMaxTotalConnections());
this.connectionManager.setDefaultMaxPerRoute(
this.hostProperties.getMaxPerRouteConnections());
return this.connectionManager;
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
配置自定义的filter
@Configuration
@EnableZuulProxy
public class CustomZuulProxyConfig extends ZuulProxyConfiguration{
@Bean
@Override
public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper,
ZuulProperties zuulProperties) {
return new CustomHostRoutingFilter(helper, zuulProperties);
}
}
这样就大功告成了
doc
routing zuul_zuul自定义SimpleHostRoutingFilter相关推荐
- SpringCloud Netflix复习之Zuul
文章目录 写作背景 Zuul是什么 Zuul的核心功能 上手实战 SpringCloud中Zuul如何使用 自定义过滤器 配置全局Fallback降级 Zuul请求头Ribbon等其他参数配置 过滤敏 ...
- 腾讯DCI网络SDN SR-TE方案详解
中国SDN/NFV大会由SDN/NFV产业联盟联合中国通信学会.中国通信标准化协会共同举办.作为国内规格最高.专业性最强.规模最大.影响最广的SDN/NFV技术产业盛会,"2018·中国SD ...
- ElasticSearch 文档路由,你的数据到底存在哪一个分片上_06
es 是一个分布式系统,当我们存储一个文档到 es 上之后,这个文档实际上是被存储到 master 节点中的某一个主分片上. 例如新建一个索引,该索引有两个分片,0个副本,如下: 接下来,向该索引中保 ...
- 网易云课堂 Service Worker 运用与实践
前言 本文首先会简单介绍下前端的常见缓存方式,再引入Service Worker的概念,针对其原理和如何运用进行介绍.然后基于google推出的第三方库Workbox,在产品中进行运用实践,并对其原理 ...
- 简单的了解下 Service Worker
前言 本文首先会简单介绍下前端的常见缓存方式,再引入serviceworker的概念,针对其原理和如何运用进行介绍.然后基于google推出的第三方库workbox,在产品中进行运用实践,并对其原理进 ...
- 网关 zuul 线程阻塞分析
网关 zuul 线程阻塞分析 本文基于一个线上真实问题.在 Zuul 无任何安全防护措施时,若遇到较大流量(单个Zuul应用在默认配置下200并发即可),将产生非常严重的后果. 本文主要是探寻下问题产 ...
- elasticsearch 自定义routing
由于线上elasticsearch集群数据量越来越大,优化已经已经是重中之重. 优化的方式有很多中,网上一大堆,自行百度. 优化方案中有个叫routing的方案是个需要熟悉业务日志才能使用.于是我就研 ...
- Flask自定义转换器,实现路由匹配正则表达式参数
Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 1 # ...
- 【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链 (转)
你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你的服务器带宽.下面这种方法可以告诉你如何在ASP.NET MVC中实现一个自定义Ro ...
最新文章
- C# 3.0 入门系列(一)
- jq塞入不同状态html的写法 switch (defaults.type)
- linux上安装activeMQ
- 《好未来编程题》求和
- 光纤转CAN总线在消防报警主机联网中的应用
- paramiko远程密码连接、批量连接主机
- java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
- rem布局下使用背景图片和sprite图
- jquery 一个元素包含多个class时
- 苹果七绕过基带激活2020_【最新!】绕过苹果ID可激活
- VBA常用实例 | OUTLOOK批量下载选中邮件中的附件
- 计算机桌面怎样创建文件,怎么在电脑桌面新建一个透明的文件夹?
- 分布式Redis集群解决方案
- 微信扫码登陆或注册设计流程
- 栈的应用之符号匹配问题
- (13)web安全|渗透测试|网络安全 注入/跨库查询/文件读写/常见的防护原理 详细图解
- Centos/Debian 占用CPU100%挖矿病毒清理
- 老鼠喝毒药问题分析及代码
- wind客户端python接口 java调用
- 前端日期选择器--只选择年或者年月的My97
热门文章
- sql怎么撤回update_零基础快速自学SQL,2天足矣!
- python安装jupyterlab_超级详细 centos7 安装 jupyter lab
- 【计算机科学基础】透明性
- 【JSON】JSON入门详解(二)
- C++学习笔记系列二
- 操作系统(八)进程管理——进程同步
- 2009 CCTV体坛风云人物颁奖盛典,精彩语录
- 【安全牛学习笔记】缓冲区溢出
- 使用git恢复未提交的误删数据
- 与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成...