【发布时间】:2019-10-04 20:31:21
【问题描述】:
我正在使用 Spring Cloud Zuul 和 Eureka 的解决方案。 REST 应用程序自己向 Eureka 注册,Zuul 通过 Eureka Service Discovery 提供对服务的访问。
我必须将 REST 应用程序配置为接受 URL 中的编码斜杠:
System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
在 Spring Boot REST 应用程序中接受编码破折号,并且:
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
DefaultHttpFirewall firewall = new DefaultHttpFirewall();
firewall.setAllowUrlEncodedSlash(true);
return firewall;
}
@Override
public void configure(WebSecurity web) throws Exception {
web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
}
在WebSecurityConfigurerAdapter 中用于相同目的。并且:
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setUrlDecode(false);
configurer.setUrlPathHelper(urlPathHelper);
}
在WebMvcConfigurer 中跳过解码url 编码的字符。
之后,仅 REST 应用程序开始使用编码斜线正常响应请求。当我将 REST 应用程序与网关 Zuul 连接时,斜线编码的问题再次发生。我使用 Zuul 以及 application.yml 中的属性 decode-url: false 对 REST 应用程序进行了相同的配置,并且 Zuul 和 REST 应用程序的组合再次起作用。
当我使用 Eureka 添加服务发现/服务注册解决方案时,问题再次出现。我搜索了很多,甚至克隆了Spring Cloud Netflix Eureka Server 2.1.0.RELEASE和Eureka Core 1.9.8,但找不到任何解决方案。
如何在 URL 中编码的 Eureka 中禁用斜杠的解码?
【问题讨论】:
-
Eureka 与编码 url 没有任何关系
-
@spencergibb 非常感谢您的评论。在您给出有关 zuul 问题的提示后,我创建了四个简单的项目来以最低配置模拟我的场景。一切正常!但不是我真正的解决方案。然后我尝试启用/禁用所有配置,以找出更简单的场景和真实场景之间的区别在哪里(怀疑是 https、cors 等......不走运)。最后,问题是网关中的spring boot 2.1.3.RELEASE版本。更改为 2.1.4.RELEASE 版本后一切正常!
标签: java spring-cloud netflix-eureka spring-cloud-netflix