mvc multipartfile from form example espaƱol spring-mvc spring-security csrf multipart servlet-3.0

spring-mvc - multipartfile - upload file spring mvc



MultipartConfig con Servlet 3.0 en Spring MVC (1)

Creo que tienes problemas relacionados con SPR-11373 . Específicamente, la especificación del servlet no es clara en lo que debería suceder cuando se realiza una resolución multiparte dentro de un Filtro.

¿Has probado usar commons-fileupload en su lugar? Esta es probablemente su mejor opción. Primero agrega la siguiente dependencia:

<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency>

A continuación, asegúrese de tener la siguiente definición de bean en su contexto de aplicación raíz.

<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="100000000"/> </bean>

Puede encontrar un ejemplo de trabajo completo con ambos recursos comunes: cargar (prefiera esta solución) y usar tomcat usando allowCasualMultipartParsing en SEC-2471.

¿Cómo agrego la configuración multiparte a una aplicación Spring mvc que utiliza controladores con métodos anotados con RequestMapping?

Fondo:

Quiero habilitar la protección csrf y así he agregado la seguridad: etiqueta csrf en mi configuración de primavera. Tengo una clase de controlador con un método anotado con RequestMapping utilizado para cargar archivos. También seguí las instrucciones de advertencia en varias partes, por lo que agregué el filtro multiparte sobre el filtro de seguridad. Cuando intenté subir un archivo después de agregar la etiqueta csrf, recibí una excepción sobre un método getParts () que faltaba. Un Google rápido resaltó que esto se debía a que usaba una versión de embarcadero que estaba basada en la especificación de servlet 2.5. Actualicé jetty-maven-plugin a 8.1.14.v20131031 e intenté subir de nuevo. Resultando en:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: No multipart config for servlet at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:68) at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:58) at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:110)

¿Dónde coloco la configuración multiparte para la configuración xml? Toda la documentación dice que se debe agregar la configuración multipartpart en la etiqueta de servlet para el servlet específico en web.xml. Sin embargo, solo hay un servlet único para mi aplicación. Así que lo agregué a eso y todavía tengo el mismo problema.

<servlet> <servlet-name>SpringDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <multipart-config> <location>/tmp</location> <max-file-size>20848820</max-file-size> <max-request-size>418018841</max-request-size> <file-size-threshold>1048576</file-size-threshold> </multipart-config> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/servlet-context.xml </param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet>

También actualicé la ubicación del esquema en la parte superior de web.xml para apuntar a la versión 3.0 de la especificación del servlet, obtenida de http://www.mkyong.com/web-development/the-web-xml-deployment-descriptor-examples / .

¿Alguna ayuda?

Editar: agregó los siguientes ataques para Rob:

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/webapp.xml</param-value> </context-param> <context-param> <param-name>spring.profiles.default</param-name> <param-value>OracleDB,common</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher </listener-class> </listener> <servlet> <servlet-name>SpringDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <multipart-config> <location>/tmp</location> <max-file-size>20848820</max-file-size> <max-request-size>418018841</max-request-size> <file-size-threshold>1048576</file-size-threshold> </multipart-config> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/servlet-context.xml </param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringDispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>MultipartFilter</filter-name> <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> </filter> <filter-mapping> <filter-name>MultipartFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>XSS</filter-name> <filter-class>com.mycompany.CrossScriptingFilter</filter-class> </filter> <filter-mapping> <filter-name>XSS</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout>10</session-timeout> </session-config> <resource-ref> <description>Core Datasource</description> <res-ref-name>jdbc/coreDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <resource-ref> <description>Location Datasource</description> <res-ref-name>jdbc/locationDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <error-page> <!-- Missing login --> <error-code>401</error-code> <location>/WEB-INF/views/errorPage.jsp</location> </error-page> <error-page> <!-- Forbidden directory listing --> <error-code>403</error-code> <location>/WEB-INF/views/errorPage.jsp</location> </error-page> <error-page> <!-- Missing resource --> <error-code>404</error-code> <location>/WEB-INF/views/errorPageNotFound.jsp</location> </error-page> <error-page> <!-- Uncaught exception --> <error-code>500</error-code> <location>/WEB-INF/views/errorPage.jsp</location> </error-page> <error-page> <!-- Unsupported servlet method --> <error-code>503</error-code> <location>/WEB-INF/views/errorPage.jsp</location> </error-page> </web-app>

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd"> <mvc:annotation-driven /> <mvc:resources mapping="/resources/**" location="/resources/" /> <mvc:resources mapping="/images/**" location="file:${fileSystemStore.fileSystemStorageLocation}"/> <context:component-scan base-package="com.mycompany.console.*" /> <mvc:interceptors> <bean class="com.mycompany.security.ChangePasswordInterceptor" /> </mvc:interceptors> <security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" pre-post-annotations="enabled" proxy-target-class="true" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> <property name="contentType" value="text/html;charset=UTF-8" /> </bean> <bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="100000000"/> </bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>classpath:language</value> <value>classpath:language_additions</value> <value>classpath:formats</value> </list> </property> <property name="defaultEncoding" value="UTF-8" /> </bean> <bean id="localeResolver" class="com.mycompany.locale.SessionLocaleResolver"/> </beans>