2013-08-29 32 views
2

我服務that're在下面的例子中擔保與標記,如:https://stackoverflow.com/a/10864088/278279春和與危機干預多部分

問題是當我添加的文件上傳,過濾器無法找到令牌請求(我想原因是要求有多型)

我使用是CommonsMultipartResolver

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

和簡單的彈簧控制器,用於接收文件@RequestParam("pic") MultipartFile pic

要解決的問題,我修改,令牌檢索請求是否具有多類型:

if(request.getContentType().contains("multipart/form-data")){ 
    List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest((HttpServletRequest) request); 
    for (FileItem item : items) { 
       if (item.isFormField() && item.getFieldName().equals("token")) { 
       return item.getString(); 
       } 
     } 
    } 

最後經過這個修改的認證工作,但在控制器MultipartFile不派遣更多,所以它拋出異常,在要求沒有參數。我怎樣才能解決這個問題,以便能夠接收帶有令牌認證的文件?

回答

1

我想你需要添加MultipartFilter。如何做到這一點取決於你使用的配置風格。在我們的例子中,我們已經添加了這些線路我們WebApplicationInitializer.onStartup()方法:

FilterRegistration.Dynamic multipartFilter = servletContext.addFilter("multipartFilter", new MultipartFilter()); 
    multipartFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*"); 
+0

你可以閱讀有關[CSRF和多請求(http://docs.spring.io/spring-security/site/docs/ 3.2.x中/參考/ htmlsingle /#CSRF-multipartfilter)。請注意,我發現我們必須在Spring Security過濾器之後添加MultipartFilter **,而不是按照文檔。 – Bernie