2011-07-07 11 views
7

que puede definir un MultipartResolver como este con un maxUploadSize de 10K (10000 bytes):¿Cómo se configura un MultipartResolver para un maxUploadSize diferente para un usuario regular frente a un administrador?

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

Sin embargo, si el administrador tiene que subir algunos archivos de gran tamaño a través de la interfaz de administración que superen este límite, la aplicación necesita ser reconfigurado temporalmente para permitir esto - y luego volver a configurarlo nuevamente para asegurarse de que los usuarios regulares no excedan este límite.

Mientras esto sucede, por supuesto, un usuario normal podría potencialmente colarse un archivo grande en sin recibir una advertencia.

¿Hay alguna manera de configurar el resolver para usar un maxUploadSize diferente en estas dos situaciones?

Respuesta

0

Puede que necesite crear dos beans multipartResolver, uno para usuarios normales y otro para administradores. En su aplicación, puede elegir qué bean usar en función del rol del usuario.

+1

'En su aplicación puede elegir qué bean utilizar en función del rol del usuario. -> ¿Cómo lo hace ya que el resolver está definido para responder a todas las solicitudes de múltiples partes recibidas por la aplicación? – Tammen

+0

@Tammen, tal vez pueda ver el hilo del foro de primavera para la respuesta:: http: //forum.spring.io/forum/spring-projects/web/317-how-to-handle-max-upload-size-exceeded ? p = 151546 # post151546. Simplemente puede definir dos beans de MultiparResolver y luego usar el DI de Spring para insertar el bean apropiado. Al igual que en la publicación anterior. – andy

0

¿Qué le parece resolver este problema con la lógica comercial? Simplemente configure el valor de maxUploadSize lo suficiente para el administrador, y verifique si el usuario es administrador o no y el tamaño del archivo.

3

El método más simple es utilizar implementaciones configuradas de forma diferente para los administradores en lugar de los usuarios normales. La forma más elegante de hacer eso es tener un Spring 3.0 @Configuration bean que produzca una instancia de bean con ámbito de sesión (también agrego un proxy de ámbito inferior, en caso de que no lo esté usando en un bean con ámbito de sesión; de lo contrario, podría simplemente usar una anotación más simple como esta: @Scope(WebApplicationContext.SCOPE_SESSION)).

@Configuration 
public class MultipartResolverBuilder { 
    @Bean @Scope(value = WebApplicationContext.SCOPE_SESSION, 
      proxyMode = ScopedProxyMode.TARGET_CLASS) 
    public CommonsMultipartResolver getMultipartResolver() { 
     CommonsMultipartResolver mr = new CommonsMultipartResolver(); 
     if (user_is_not_admin) { 
      mr.setMaxUploadSize(10000); 
     } 
     return mr; 
    } 
} 

Usted tendrá que añadir el código para determinar si el usuario es un administrador o no, por supuesto, y usted tendrá que añadir el soporte para la exploración de configuración basada en anotación (si no tienes no lo tengo ya; <context:annotation-config/>/<context:component-scan .../> son cosas bastante comunes).

+0

Digno de señalar en esta respuesta: Si llamo a mi método Bean 'getMultipartResolver', Spring se queja. Tengo que llamar al mío 'multipartResolver'. Solo en caso de que alguien más tenga este problema. –

Cuestiones relacionadas