当前位置: 首页 > 面试题库 >

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

益锦程
2023-03-14
问题内容

我使用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)?我不想在末尾使用斜杠(“ /”)。

我已经看过以下资源

  • Spring MVC控制器浏览器下载“ f.txt”
  • 添加对configureContentNegotiation的属性支持

问题答案:

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

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



 类似资料:
  • 我使用Spring Boot实现了一个REST应用程序。我有一个这样映射的资源 不幸的是,最后一个结尾被解释为文件扩展名,导致响应头提供文件下载,而不仅仅是普通数据。 我认为我可以使用自定义的WebMvcConfigurerAdapter Bean(并且没有@enableWebMVC)注释来处理这种情况,就像这里解释的那样。 但这并不奏效。不幸的是,检测到的文件扩展名不是fix-因此我不能使用规则

  • 我在我的SpringMVC项目中得到了这个错误。我必须在浏览器中手动添加完整的路径来运行代码,但我不能直接运行它。 web.xml:

  • 问题内容: 我必须将数据从Excel文件导入数据库,并执行此操作,我想检查所选文件的扩展名。 这是我的代码: 但是我总是得到: 选择一个Excel文件! 我找不到我的代码有什么问题,请有人帮忙。 问题答案: 以下 应该 要么

  • 很抱歉再次问这种问题,但我无法通过查看其他线程和Spring doc来解决我的问题。 我正在使用maven的3.1.0.RELEASE,并尝试使用注释和java配置。 以下是我的web.xml: 这是我的档案web-application-config.xml. 我有两个类。第一个配置视图解析器 第二个定义我的控制器: 根据我的配置,我想一切都应该指向我的home()函数。然而,事实并非如此,以下

  • 问题内容: 我已经检查了关于stackoverflow的几乎所有相关文章,但是我无法解决我的问题。 Here is the code: web.xml: spring-servlet.xml: myController: Web Pages/index.jsp: Web Pages/WEB-INF/jsp/hello.jsp: 因此,当我启动该应用程序时,index.jsp已正确加载,但是当我单击

  • 早上,我已经检查了这个问题的大部分答案(在名为DispatcherServlet的DispatcherServlet中找不到URI为的HTTP请求的映射),以及(在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/ChickenTest/index]的HTTP请求的映射),但我仍然得到“在名为“bmoa”的DispatcherServlet中找不到U