小编典典

避免在Spring MVC请求映射中使用URI中的浮点数来检测文件扩展名

spring-boot

我使用Spring Boot来实现REST应用程序。我有一个这样映射的资源

@RequestMapping(value = "/{fromLat}/{fromLon}/{toLat}/{toLon:.+}", method = {RequestMethod.GET},
        produces = {"application/json"})

因此,路径包含坐标,并且请求如下所示

$ curl -I -X GET http://localhost:8085/foobar/53.481297/9.900539/53.491691/9.946046

不幸的是,最后一端被解释为文件扩展名,该文件扩展名导致响应头提供文件下载,而不仅仅是原始数据。

Content-Disposition: attachment;filename=f.txt

我以为我可以处理这种情况与自定义WebMvcConfigurerAdapter豆(且不@EnableWebMvc)注释解释一样在这里

public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(false);
    }
}

但这并不能解决问题。不幸的是,检测到的文件扩展名未修复-因此,我无法对扩展名使用规则。

如何配置系统以仅响应内容而不响应Content-Disposition标头(导致下载f.txt)?我不想在末尾使用斜杠(“ /”)。

我已经看过以下资源


阅读 326

收藏
2020-05-30

共1个答案

小编典典

在Spring Framework 4.1.9和4.2.3中,Content-
Disposition标头已固定为使用“内联”类型,该类型仅建议文件下载名称,以防最终下载内容。它将不再强制“另存为”对话框。

还请注意,首先使用Content-
Disposition标头的原因是为了保护应用程序免受RFD攻击。这是一个非常复杂的问题,但是您可以在CVE-2015-5211报告中看到摘要。

2020-05-30