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 ...
最新文章
- 为什么Eureka比ZooKeeper更适合做注册中心?
- Linux终端设备详解
- 省二c语言笔试试卷,2005年春浙省二级C语言笔试试卷.doc
- centos nginx不是命令_虚拟机下Centos 8.0 安装PHP+Mysql+Nginx
- php语言冒泡法,冒泡排序法(php)
- Oracle行列转换小结
- getContentResolver().query()方法selection参数使用详解(转)
- 帝国CMS7.5仿《问答库》题库问答学习平台网站源码 带手机版
- dj鲜生-03-用户模块的创建与模型类的创建
- 2018第一场多校 -补题
- H3C三层交换机划分VLAN示例
- C#中BackgroundWorker的介绍
- 编译原理实验五:编译器自动生成工具
- 三种PS切图方法—简单易懂
- 学习3D建模电脑配置要求
- C# Teechart Pareto图实现 折线显示百分比,多坐标轴显示等
- 骨传导耳机的音质怎么样?
- WebGL入门(六)-通过坐标计算实现图形的平移、旋转和缩放变换
- 纪念Dropbox君
- 论文查重时图片会不会被检测?
热门文章
- proteus仿真micropython_基于micropython的滑动平均滤波器
- 专栏导读:数据驱动的优化
- 作者:赵妍妍(1983-),女,哈尔滨工业大学机电学院媒体技术与艺术系副教授、硕士生导师。...
- oracle PL/SQL编程基础
- 【操作系统】核心知识归纳总结
- 【软件质量】改善结构松散的代码
- 【离散数学】极小全功能集
- 快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server
- 推荐您使用 Markdown 来编辑文章
- 【SQL Server配置管理器】提示:无法连接到 WMI 提供程序。您没有权限或者该服务器无法访问...