我可以使用10K(10000字节)的maxUploadSize定义这样的MultipartResolver:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10000"/> </bean
但是,如果管理员需要通过超过此限制的管理界面上传一些大文件,则需要临时重新配置应用程序以允许此操作 – 然后再次重新配置以确保常规用户不超过此限制.
当然,当发生这种情况时,普通用户可能会在没有收到警告的情况下潜入大文件.
有没有办法在这两种情况下配置解析器使用不同的maxUploadSize?
解决方法
最简单的方法是为管理员而不是普通用户使用不同配置的bean实现.最优雅的方法是使用
Spring 3.0 @Configuration bean生成会话范围的bean实例(我在下面添加一个范围代理,以防你在会话范围的bean中没有使用它;否则你可以使用它一个更简单的注释,如下所示:@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; } }
当然,您需要添加代码来确定用户是否是管理员,并且您需要添加支持扫描基于注释的配置(如果您还没有获得它;< context:annotation-config /> /< context:component-scan ... />是非常常见的事情.