简介
我有spring MVC应用程序我正在从控制器加载图像。出于安全考虑,我将X-Content-Type-Options:nosniff
添加到了我的Spring应用程序
通过在springConfig xml <security:content-type-options/>
问题:此IE未加载控制器响应的图像。我怀疑响应中没有设置内容类型。因为另一个回复X-Content-Type-Options:nosniff
和Content-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中也是如此。
答案 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,我也会得到默认图像,其他原因,我没有在这里发布。