Как настроить MultipartResolver для другого значения maxUploadSize для обычного пользователя и администратора? - PullRequest
7 голосов
/ 07 июля 2011

Я могу определить MultipartResolver следующим образом: maxUploadSize 10K (10000 байт):

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

Однако, если администратору необходимо загрузить через интерфейс администратора несколько больших файлов, которые превышают этот предел, приложение должно быть временно переконфигурировано , чтобы разрешить это - , а затем снова сконфигурирован, чтобы убедиться, что обычные пользователи не превышают этот предел .

Хотя это и происходит, конечно, обычный пользователь потенциально может скрыть большой файл в без получения предупреждения.

Есть ли способ настроить распознаватель на использование другого maxUploadSize в этих двух ситуациях?

Ответы [ 3 ]

3 голосов
/ 07 июля 2011

Самый простой способ - использовать реализации компонента с различной конфигурацией для администраторов, а не для обычных пользователей. Самый элегантный способ сделать это - иметь 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 .../> довольно обычные вещи).

0 голосов
/ 07 июля 2011

Как насчет решения этой проблемы с помощью бизнес-логики?Просто установите значение maxUploadSize, достаточное для администратора, и проверьте, является ли пользователь администратором или нет, и размер файла.

0 голосов
/ 07 июля 2011

Возможно, вам потребуется создать два bean-компонента multipartResolver, один для обычных пользователей и один для администраторов. В своем приложении вы можете выбрать, какой компонент использовать в зависимости от роли пользователя.

...