如何禁用zuul解码编码的斜杠%2F?

时间:2019-05-17 13:37:02

标签: java spring-cloud netflix-eureka spring-cloud-netflix

我正在使用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.RELEASEEureka Core 1.9.8,但找不到任何解决方案。

如何在URL中编码的Eureka中禁用斜线解码?

1 个答案:

答案 0 :(得分:0)

解决方案是将网关中的Spring Boot版本从2.1.3.RELEASE更改为2.1.4.RELEASE。