从REST控制器返回的InputStreamResource中未发布的InputStream

时间:2018-05-04 11:27:52

标签: java spring-mvc file-io fortify

我的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中使用。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我认为您已经找到问题的答案。而且,可能要对Fortify提出问题,因为Stream已被Spring关闭-请参阅“调查”-How to handle IO streams in Spring MVC