【问题标题】:How do you configure a MultipartResolver for a different maxUploadSize for a regular user vs. an admin?您如何为普通用户和管理员配置不同的 maxUploadSize 的 MultipartResolver?
【发布时间】:2011-09-30 08:36:32
【问题描述】:

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

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

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

当然,在发生这种情况时,普通用户可能会将一个大文件潜入而不会收到警告。

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

【问题讨论】:

    标签: java spring spring-mvc multipart resolver


    【解决方案1】:

    最简单的方法是为管理员而不是普通用户使用不同配置的 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;
        }
    }
    

    当然,您需要添加代码来确定用户是否是管理员,并且您需要添加对扫描基于注释的配置的支持(如果您还没有; &lt;context:annotation-config/&gt;/&lt;context:component-scan .../&gt; 是很常见的东西)。

    【讨论】:

    • 这个答案值得注意:如果我调用我的 bean 方法 getMultipartResolver,Spring 会抱怨。我必须打电话给我的multipartResolver。以防万一其他人遇到这个问题。
    【解决方案2】:

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

    【讨论】:

    • In your app you can pick which bean to use based on the user's role. -> 既然解析器被定义为响应应用程序接收到的所有多部分请求,你是如何做到的?
    • @Tammen,也许你可以看到这个春季论坛的帖子来寻找答案::forum.spring.io/forum/spring-projects/web/…。你可以只定义MultiparResolver的两个bean,然后使用Spring的DI插入合适的bean。就像上面的帖子一样。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2022-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      相关资源
      最近更新 更多