zoukankan      html  css  js  c++  java
  • 解决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;
        }

      

         

  • 相关阅读:
    使用 HttpClient 调用第三方接口
    Servlet 的生命周期及工作原理
    SpringBoot 框架简介及搭建
    使用 SimpleDateFormat 获取上个月的日期
    LoadRunner常见问题(一)
    Web_reg_find()函数的使用
    IEtester调试IE6,IE7,IE8,IE9的CSS兼容性的免费工具
    web_find()函数检查中文字符串失败的处理方法
    lr_shoami()的用法
    IP欺骗经验总结
  • 原文地址:https://www.cnblogs.com/huangheng01/p/10517884.html
Copyright © 2011-2022 走看看