HTTP Status 403 - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'. Ошибка при загрузке xml

При загрузке xml файла выдает ошибку - HTTP Status 403 - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

petit.jsp

<br>

 <div id="dialog-message" title="Процедура загрузки">
  <p>
    <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
    Процедура загрузки
  </p>
  <p>
    <div class="container">
    <h2>Загрузить</h2>
    <hr>
    <!-- File Upload From -->
    <form name ="submit_file" action="fileUpload_hotcall" method="post" enctype="multipart/form-data">
      <div class="form-group">
        <input class="form-control" type="file" name="file">
      </div>
      <br>
      <div class="form-group">
        <button class="btn btn-primary" type="submit">загрузить</button>
      </div>
    </form>
    <br />

PetitController.java

  @PostMapping("/fileUpload_hotcall")
   public ResponseEntity<Object> fileUpload(@RequestParam(value = "_csrf", required = false) String csrf, @RequestParam("file") MultipartFile file)
         throws IOException, JAXBException {

      // Save file on system
      if (!file.getOriginalFilename().isEmpty()) {
          
         String pathStoreUploadedFile = Option.getDirectory("directory","directories.properties");
         
         File f = new File(pathStoreUploadedFile, file.getOriginalFilename());
         BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(f));
         outputStream.write(file.getBytes());
         outputStream.flush();
         outputStream.close();
         
         List<Petit> pt = petitService.parseArchiveFile(f);
         
         for(Petit p : pt) petitService.addPetit(p);
         
      }else{
         return new ResponseEntity<>("Файл не загружен.",HttpStatus.BAD_REQUEST);
      }
      
      return new ResponseEntity<>("Файл успешно загружен в базу.",HttpStatus.OK);
   }

Ответы (1 шт):

Автор решения: BigTows

Как вариант, можно добавить CSRF-токен в action, таким образом получится.

 <form name ="submit_file" 
       action="action="fileUpload_hotcall?${_csrf.parameterName}=${_csrf.token}"" 
       method="post" enctype="multipart/form-data">

Но лучше всё-таки (из-за параметров безопасности) переместить эти данные в заголовок или в тело запроса, используя JavaScript, к примеру.

Подробнее в пункте 18.5.4

→ Ссылка