2011-07-07 21 views
7

tôi có thể xác định một MultipartResolver như thế này với một maxUploadSize của 10K (10000 bytes):Làm cách nào để bạn định cấu hình MultipartResolver cho một maxUploadSize khác cho người dùng thông thường so với quản trị viên?

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

Tuy nhiên, nếu quản trị cần phải tải lên một số tập tin lớn thông qua giao diện quản trị mà vượt quá giới hạn này, ứng dụng cần được tạm thời định cấu hình lại để cho phép điều này - và sau đó được định cấu hình lại để đảm bảo người dùng thông thường không vượt quá giới hạn này.

Trong khi điều này xảy ra, tất nhiên, người dùng thông thường có thể có khả năng lẻn một tệp lớn trong mà không nhận được cảnh báo.

Có cách nào để định cấu hình trình giải quyết sử dụng maxUploadSize khác nhau trong hai tình huống này không?

Trả lời

0

Bạn có thể cần phải tạo hai hạt multiartResolver, một cho người dùng bình thường và một cho quản trị viên. Trong ứng dụng của bạn, bạn có thể chọn hạt nào để sử dụng dựa trên vai trò của người dùng.

+1

'Trong ứng dụng của bạn, bạn có thể chọn hạt nào sẽ sử dụng dựa trên vai trò của người dùng.' -> Bạn làm như thế nào vì trình phân giải được xác định để phản hồi tất cả các yêu cầu nhiều phần mà ứng dụng nhận được? – Tammen

+0

@Tammen, có thể bạn có thể xem luồng của diễn đàn mùa xuân này cho câu trả lời:: http: //forum.spring.io/forum/spring-projects/web/317-how-to-handle-max-upload-size-exceeded ? p = 151546 # post151546. Bạn chỉ có thể xác định hai hạt của MultiparResolver và sau đó sử dụng DI của Spring để chèn bean thích hợp. Chỉ cần như bài viết trên làm. – andy

0

Làm cách nào giải quyết vấn đề này với logic nghiệp vụ? Chỉ cần đặt giá trị maxUploadSize đủ cho quản trị viên và kiểm tra xem người dùng có phải là quản trị viên hay không và kích thước của tệp.

3

Phương pháp đơn giản nhất là sử dụng cách triển khai bean được định cấu hình khác cho quản trị viên thay vì cho người dùng thông thường. Cách thanh lịch nhất để làm điều đó là có một Spring 3.0 @Configuration bean để tạo ra một cá thể bean có phạm vi phiên (tôi cũng thêm một proxy được sắp xếp bên dưới), trong trường hợp bạn không sử dụng nó trong bean phiên, nếu không bạn chỉ có thể sử dụng một chú thích đơn giản như sau: @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; 
    } 
} 

Bạn cần phải thêm mã để xác định xem người dùng có phải là quản trị viên hay không, tất nhiên và bạn cần thêm hỗ trợ để quét cấu hình dựa trên chú thích (nếu bạn chưa có nó; <context:annotation-config/>/<context:component-scan .../> là những thứ khá phổ biến để có).

+0

Đáng chú ý về câu trả lời này: Nếu tôi gọi phương thức bean của tôi 'getMultipartResolver', Spring than phiền. Tôi phải gọi tôi là "multipartResolver'. Chỉ trong trường hợp bất cứ ai khác nhận được vấn đề này. –