Я занимаюсь разработкой веб-приложения, и мне нужно, чтобы мои пользователи загружали файлы. При попытке использовать enctype = 'multipart / form-data' после отправки формы я получаю «403 запрещено». Я знаю, что это связано с защитой CSRF, но я пробовал некоторые вещи, и ничего не работает. Я пытался поставить это
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
insertFilters(servletContext, new MultipartFilter());
}
в моем SpringSecurityInitializer, но он ничего не делает. Я также попытался отправить токен csrf в форме, подобной этой:
<form action="./upload?${_csrf.parameterName}=${_csrf.token}" method="post" enctype="multipart/form-data">
но тогда я не отправляю остальные данные формы, а когда я делаю
@RequestParam(value="enunciado", required = false) String enunciado
Я получаю ошибку, потому что ее не существует.
Я также пытался добавить это в мой web.xml
<filter>
<filter-name>MultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
, как предложено в https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/csrf.html. Однако, когда я делаю это, мой сервер Tomcat аварийно завершает работу во время инициализации без какой-либо конкретной ошибки, просто «Сервер Tomcat v7.0 на локальном хосте не запускается». сообщение, я понятия не имею, почему.
Кто-нибудь может сказать мне, как я должен заставить multipart работать с csrf? Спасибо