解決springmvc在multipart/form-data方式提交請求在過濾器Filter中獲取不到參數的問題


     這兩天在項目中遇到這樣一種情況,通過過濾器filter獲取參數token去驗證是否登錄,始終獲取不到,一直是null,而通過攔截器(interceptor)可以,百度一番,終於明白其中緣由....

     我們只需要理解兩點:

           1)一個請求到達過濾器filter時還未經過spring的請求解析,到達攔截器(interceptor)時請求已經經過spring的解析,而spring對multipart/form-data方式請求已做處理;

           2)實現了ServletRequest的org.springframework.web.multipart.MultipartHttpServletRequest.java 類 (這個類的getParameter方法可以獲取到multipart/form-data和非multipart/form-data方法上傳的參數。

 

      所以我們得出一下解決方案:

         首先在你的spring配置文件中配置MultipartHttpServletRequest

<bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8">
	<property name="maxUploadSize">
		<value>104857600</value>
	</property>
	<property name="maxInMemorySize">
		<value>4096</value>
	</property>
</bean>

  或者

   

    然后在filter初始化時注入MultipartResolver

// 用於創建MultipartHttpServletRequest
private MultipartResolver multipartResolver = null;
	
@Override
public void init(FilterConfig arg0) throws ServletException {
// 注入bean
	multipartResolver = ((MultipartResolver)ApplicationContextUtil.getContext().getBean("multipartResolver", MultipartResolver.class));
}

     最后在dofilter中

     String contentType = req.getContentType();
        if (contentType != null && contentType.contains("multipart/form-data")) {
           MultipartHttpServletRequest multipartRequest = multipartResolver.resolveMultipart((HttpServletRequest)req);
            //在這里可以通過multipartRequest 獲取參數了

// 把multipartRequest讓請求繼續執行,之后的所有攔截器和controller都能繼續get參數
chain.doFilter(multipartRequest , response);
       return;
    }

  

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM