IE图像没有加载X-Content-Type-Options:nosniff

时间:2015-10-09 08:58:50

标签: spring internet-explorer

简介

我有spring MVC应用程序我正在从控制器加载图像。出于安全考虑,我将X-Content-Type-Options:nosniff添加到了我的Spring应用程序

通过在springConfig xml <security:content-type-options/>

中设置以下内容

问题:此IE未加载控制器响应的图像。我怀疑响应中没有设置内容类型。因为另一个回复X-Content-Type-Options:nosniffContent-Type:image/png;的网站工作正常。

TRY1 我试图更改我的控制器以设置内容类型。但它没有发生。

@RequestMapping(value = "/getUserImage" , produces = org.springframework.http.MediaType.IMAGE_PNG_VALUE)
public @ResponseBody
void getUserImage(
        @RequestParam(value = "userId", required = false) int userId,
        HttpServletRequest request, HttpServletResponse response) {

    try {
        //Get file and add it to response
        IOUtils.copy(inputStream, response.getOutputStream());
        response.getOutputStream().flush();
        response.setContentType(org.springframework.http.MediaType.IMAGE_PNG_VALUE);
        response.setHeader("Content-Type","image/png");
        response.flushBuffer();
        inputStream.close();
    } catch (Exception e){
    }
}

TRY2 我尝试在方法拦截器中添加响应头,但仍然没有运气。

但在Chrome和Firefox中也是如此。

1 个答案:

答案 0 :(得分:0)

试试这个:

 @RequestMapping(value = "/image/{personId}")
    @ResponseBody
    public HttpEntity<byte[]> getPhoto(@PathVariable int personId) {
        Person person = this.personService.getPersonById(personId);
        if (person != null && person.getProfileThumbnail() != null) {
            try {
                byte[] image;
                try {
                    image = org.apache.commons.io.FileUtils.readFileToByteArray(new File(msg + "/" + person.getUsername() + "/" + personId + ".png"));
                } catch (FileNotFoundException e) {
                    image = org.apache.commons.io.FileUtils.readFileToByteArray(new File(defaultProfilePath));
                }
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.IMAGE_PNG);
                headers.setContentLength(image.length);
                return new HttpEntity<>(image, headers);
            } catch (IOException ignored) {
            }

        } 
}

我基本上做的是检查文件系统上是否有用户的图像,如果没有,那么我正在加载默认图像。现在它适用于所有浏览器,所以即使personid为0,我也会得到默认图像,其他原因,我没有在这里发布。