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, к примеру.