Я столкнулся с внутренней ошибкой сервера 500: доступ к файлу запрещен

Я написал код для печати листа Excel с помощью springboot. Я получаю ошибку сервера 500, в которой говорится, что доступ к файлу запрещен.

    @RequestMapping(value = "/downloadReport", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> downloadReport(@RequestParam(value = "employeeName", required = false) String employeeName,
        @RequestParam(value = "empId",required = false) Integer empId,@RequestParam(value = "skillMasters",required = false) Integer skillMasters,@RequestParam(value = "projects",required = false) List<String> projects,@RequestParam(value = "accounts",required = false) List<String> accounts, HttpServletResponse response) throws IOException, URISyntaxException, ParseException {
    CourseIndividualReportRequest courseIndividualReportRequest = new CourseIndividualReportRequest();
    courseIndividualReportRequest.setEmployeeName(employeeName);
    courseIndividualReportRequest.setEmpId(empId);
    courseIndividualReportRequest.setAccounts(accounts);
    courseIndividualReportRequest.setProjects(projects);
    courseIndividualReportRequest.setSkillMasters(skillMasters);

    service.generateIndividualReport(courseIndividualReportRequest);
    File file = new File("D:\\CandidateCheckedInReport.xls");
    HttpHeaders respHeaders = new HttpHeaders();
    respHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    respHeaders.setContentLength((int) file.length());
    respHeaders.setContentDispositionFormData("attachment", "CandidateCheckedInReport");

    InputStreamResource isr = new InputStreamResource(new FileInputStream(file));
    if (file.exists()) {
    }
    return new ResponseEntity<InputStreamResource>(isr, respHeaders, HttpStatus.OK);
}

реализация услуги

исключение похоже на это java.io.FileNotFoundException: D: \ CandidateCheckedInReport.xls (доступ запрещен)

sasikumar chowdary 01.01.2019 01:13

Вы перепроверили очевидное? То есть вы правильно написали имя файла, оно находится в корне диска D: \ и процесс, запускающий ваше приложение, имеет разрешение на доступ к нему?

dave 01.01.2019 01:21

Пользователь, от имени которого запущена веб-служба, не имеет разрешений на чтение этого файла.

Joe C 01.01.2019 01:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
471
1

Ответы 1

Наиболее вероятный источник проблемы:

InputStreamResource isr = new InputStreamResource(new FileInputStream(file));

где путь к file - "D: \ CandidateCheckedInReport.xls".

Наиболее вероятное объяснение состоит в том, что «пользователь», на котором запущен веб-сервер, не имеет разрешения на чтение этого файла. Веб-приложениям часто запрещен доступ к файлам за пределами дерева веб-приложения или веб-контейнера. Это мешает хакеру использовать дыры в безопасности в плохо написанном веб-приложении для чтения и записи произвольных файлов в файловой системе сервера.

Решения:

  • Поместите файл, который вы пытаетесь сделать доступным, в дерево файлов веб-приложения или веб-контейнера.

  • Измените ограничение доступа, чтобы разрешить пользователю веб-сервера доступ к файлу в его текущем расположении. Будь очень осторожен, чтобы разрешить доступ только к тем файлам / каталогам, которые нужно быть доступны через веб-приложение.

Спасибо, Стивен, за ответ. пожалуйста, дайте мне знать, как можно решить эту проблему

sasikumar chowdary 01.01.2019 01:29

Пожалуйста, перечитайте мой ответ! Я не могу быть более конкретным, потому что вы предоставили минимальную информацию об используемом веб-контейнере.

Stephen C 01.01.2019 01:30

Другие вопросы по теме