Неизданный InputStream в InputStreamResource возвращается из контроллера REST - PullRequest
0 голосов
/ 04 мая 2018

У меня есть такой метод в моем контроллере 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 голосов
/ 26 декабря 2018

Я думаю, что вы смогли найти ответ на свой вопрос. И, возможно, это вопрос Fortify, потому что поток закрывается Spring - см. «Расследование» - Как обрабатывать потоки ввода-вывода в Spring MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...