我的REST控制器中有这样的方法,返回文件数据:
@RequestMapping(
value = "by-id/{attachmentId}",
method = RequestMethod.GET
)
public ResponseEntity<InputStreamResource> attachmentById(
@PathVariable("attachmentId") String attachmentId) {
GridFSDBFile file = service.getAttachment(attachmentId);
...... some unrelated code here, setting headers, etc .....
return new ResponseEntity<InputStreamResource>(
new InputStreamResource(file.getInputStream()), respHeaders, HttpStatus.OK);
}
这很好用,但是通过Fortify的报告,我将发布InputStream,显然是在file.getInputStream()
中打开的。可能我不得不使用try-with-resources,因为InputStream是自动关闭的,或者在file.getInputStream().close()
块中调用finally
。但似乎我不能这样做,因为我完全不知道InputStreamResource
的构造函数及其方法的实现,无论该输入流是否仍在返回的ResponseEntity中使用。
我该怎么办?
答案 0 :(得分:0)
我认为您已经找到问题的答案。而且,可能要对Fortify提出问题,因为Stream已被Spring关闭-请参阅“调查”-How to handle IO streams in Spring MVC