我正在使用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中禁用斜线解码?
答案 0 :(得分:0)
解决方案是将网关中的Spring Boot版本从2.1.3.RELEASE更改为2.1.4.RELEASE。