【问题标题】:How to disable zuul decoding encoded slash %2F?如何禁用zuul解码编码斜线%2F?
【发布时间】: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.RELEASEEureka 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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多