Я пытаюсь создать файловый сервис, я планирую запустить этот сервис на моем файловом сервере, и этот сервис хранит и извлекает файлы из файловой системы сервера, я имею в виду вне контекста приложения.Я хочу задать свои вопросы по коду;
@RestController
@RequestMapping(path = "/public/")
public class FileDownloadTestController {
@GetMapping("{parentDir}/{childDir}/{fileName}")
public void getSomeFile(@PathVariable("parentDir") String parentDirectory,
@PathVariable("childDir") String childDirectory,
@PathVariable("fileName") String fileName,
HttpServletResponse response) throws IOException {
String fullPath = getFullPath(parentDirectory, childDirectory, fileName);
OutputStream outputStream = null;
try (InputStream fileInputStream = new FileInputStream(fullPath)) {
MediaType mediaType = getMediaType(servletContext, fileName);
response.setContentType(mediaType.getType());
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=" + fileName);
int read = 0;
byte[] bytes = new byte[128];
outputStream = response.getOutputStream();
while ((read = fileInputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
} finally {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
}
}
}
Этот кодекс работает хорошо, но;
1) Что я в основном стремлюсь сделать, это получить доступ к источнику (то естьфайл) с URL-адресом, аналогичным приведенному ниже примеру;
http://file.somedomain.com/abc/def/ghi.jpg
Это правильный способ сделать это?(Я спрашиваю об этом, потому что мне интересно, можете ли вы предложить другой подход)
2) Если мой подход верный, то безопасен ли этот вариант?Может ли пользователь отправить вредоносный запрос, если да, как мне его обработать и заранее избежать таких запросов?
3) Правильно ли разрешить службе прямой доступ к файловой системе сервера?