java – 如何为普通用户和管理员配置不同maxUploadSize的MultipartResolver?

我可以使用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 ... />是非常常见的事情.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...