7

我可以用10K(10000 字节)定义一个MultipartResolver这样的:maxUploadSize

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

但是,如果管理员需要通过管理界面上传一些超过此限制的大文件,则需要临时重新配置应用程序以允许这样做 -然后再次重新配置以确保普通用户不会超过此限制.

当然,当这种情况发生时,普通用户可能会在没有收到警告的情况下偷偷输入一个大文件。

有没有办法将解析器配置为maxUploadSize在这两种情况下使用不同的?

4

3 回答 3

4

最简单的方法是为管理员而不是普通用户使用不同配置的 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 .../>是很常见的东西)。

于 2011-07-07T12:34:42.237 回答
0

您可能需要创建两个 multipartResolver bean,一个用于普通用户,一个用于管理员。在您的应用程序中,您可以根据用户的角色选择要使用的 bean。

于 2011-07-07T10:50:04.673 回答
0

如何用业务逻辑解决这个问题?只需为管理员设置足够的 maxUploadSize 值,并检查用户是否为管理员以及文件的大小。

于 2011-07-07T11:23:24.980 回答