2011-07-07 106 views
7

我可以定義一個MultipartResolver像這樣用10K的maxUploadSize(10000個字節):如何爲普通用戶和管理員爲不同的maxUploadSize配置MultipartResolver?

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

但是,如果管理員需要通過管理界面,超出此限制,的應用上傳一些大的文件需要暫時重新配置以允許此 - 然後再次重新配置以確保常規用戶不超過此限制

發生這種情況時,當然,普通用戶可能會潛在潛入的大文件而不會收到警告。

有沒有辦法配置解析器在這兩種情況下使用不同的maxUploadSize

回答

0

您可能需要創建兩個multipartResolver bean,一個用於普通用戶,另一個用於管理員。在您的應用程序中,您可以根據用戶的角色選擇要使用的bean。

+1

'在您的應用程序中,您可以根據用戶的角色選擇要使用的bean。 - >您如何做到這一點,因爲解析器被定義爲響應應用程序接收的所有多部分請求? – Tammen

+0

@Tammen,也許你可以看到這個春天論壇的回答:http://forum.spring.io/forum/spring-projects/web/317-how-to-handle-max-upload-size-exceeded ?p = 151546#post151546。你可以定義兩個MultiparResolver bean,然後使用Spring的DI來插入相應的bean。就像上面的文章一樣。 – andy

0

如何解決業務邏輯的這個問題?只需將maxUploadSize值設置爲足夠大,然後檢查用戶是否爲admin以及文件的大小。

3

最簡單的方法是爲管理員使用不同配置的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 .../>是很常見的東西)。

+0

值得注意的是:如果我調用我的bean方法'getMultipartResolver',Spring會抱怨。我必須打電話給我'multipartResolver'。以防萬一誰得到這個問題。 –

相關問題