使用ServletContext#getMimeType()是否安全

时间:2015-10-15 01:32:09

标签: servlets mime-types

更具体地说,我正在使用:

public String getMimeType() {
    ServletContext context = request.getServletContext();
    String filePath = request.getRequestURI().substring(request.getContextPath().length()+1, request.getRequestURI().length());
    String fileName = context.getRealPath(filePath);        
    return context.getMimeType(fileName);
}

确定从客户端请求的文件类型(css,js,font等)。根据文件类型,会发生不同的操作。这是跨浏览器的一致性,或者通常是一种安全的方法来确定基于url中传递的文件名的文件类型,还是太容易破坏?

1 个答案:

答案 0 :(得分:1)

  

这些浏览器是否一致?

与文件扩展名关联的mime类型位于此特定代码段中,而不是由客户端确定的。它由服务器根据<mime-mapping>中的web.xml条目确定。客户端控制的所有内容都是URL中的文件扩展名。但你已经知道了。

因此,您最好再提出&#34;这是否在服务器之间保持一致?&#34; 。答案是。每个服务器都有自己的预定义mime映射。较旧的服务器可能缺少新的mime类型(如XLSX,SVG等)的映射。如果您想要覆盖您感兴趣的每个mime类型,并且您无法控制目标服务器及其配置,那么你最好在webapp自己的web.xml中明确地映射它。

对具体问题

无关,请跳过getRealPath()废话。在一个体面的Web应用程序中永远不需要它。而且,你在技术上根本不需要它。 URI或甚至唯一的文件名对getMimeType()方法都有效。