我正在使用带有弹簧云Zuul和Eureka的解决方案。REST申请注册本身与Eureka和Zuul一起通过Eureka服务发现提供了对服务的访问。
我必须配置其余的应用程序以接受:
接受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编码字符。
之后,仅剩下的应用程序就开始正常回答用编码斜线的请求。当我将其余的应用程序与Zuul连接起来时,Gateway的问题再次发生了。我使用Zuul以及应用程序中的属性decode-url: false
对REST应用程序进行了相同的配置。
当我使用Eureka添加服务发现/服务注册解决方案时,问题再次开始。我搜索了很多,甚至克隆了弹簧云Netflix eureka服务器2.1.0.Release和Eureka Core 1.9.8,但找不到任何解决方案。
如何禁用在URL中编码的Eureka中的斜线解码?
解决方案是将Spring Boot版本从2.1.3.Release更改为Gateway中的2.1.4.Release。