Добрый вечер, при попытке загрузить файл выпадет ошибка MyAccessDeniedHandler --> Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'
Вопрос почему?
Как исправить?
Важно, при оправке обычных запросов, все нормально работает....
Мои настройки спринга и что я сделал..
У меня спринг и тхумелеаф, тхумелеаф вставляет токен в форму автоматом, а в спринге он включем по дефолту.
Сделал бил -StandardServletMultipartResolver
@Bean
public StandardServletMultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
2. Установил MultipartConfigElement
public class AppConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{ WebConfig.class, WebSecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
private String TMP_FOLDER = "../resources/images";
private int MAX_UPLOAD_SIZE = 5 * 1024 * 1024;
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext.addListener(new SessionListener());
ServletRegistration.Dynamic appServlet = servletContext.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
MultipartConfigElement mce = new MultipartConfigElement(TMP_FOLDER, MAX_UPLOAD_SIZE, MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE / 2);
appServlet.setMultipartConfig(mce);
}
@Override
protected FrameworkServlet createDispatcherServlet(WebApplicationContext servletAppContext) {
final DispatcherServlet dispatcherServlet = (DispatcherServlet) super.createDispatcherServlet(servletAppContext);
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
return dispatcherServlet;
}
}
3. контроллер
@Controller
public class UploadController {
private static final Logger logger = LogManager.getLogger(UploadController.class);
@RequestMapping(value = "/uploadImage", method = RequestMethod.GET)
public String showUploadImage(Model model) {
return "uploadImage";
}
@RequestMapping(value = "/uploadImage", method = RequestMethod.POST)
public String uploadImage(@RequestParam("file") MultipartFile file, Model model) {
logger.debug("UPLOAD FILE getContentType" + file.getContentType());
logger.debug("UPLOAD FILE getName " + file.getName());
return "uploadImage";
}
}
4. моя форма
<form th:action="@{/uploadImage}" enctype="multipart/form-data" method="POST" >
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
Как это победить? Спасибо.