Как исправить форму Multipart с помощью CSRF - PullRequest
0 голосов
/ 31 марта 2019

Я занимаюсь разработкой веб-приложения, и мне нужно, чтобы мои пользователи загружали файлы. При попытке использовать 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? Спасибо

...