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;
        }

      

         

  • 相关阅读:
    服务器新环境搭建笔记
    mysql存储过程中的异常处理
    Maven为不同环境配置打包
    redis 绑定任意ip
    Redis 【Hash】 一句话说明
    Redis 【string】 一句话说明
    Redis 【keys】 一句话说明
    Redis命令参考【EXPIRE】
    Apache Maven 入门篇 ( 下 )
    Apache Maven 入门篇 ( 上 )
  • 原文地址:https://www.cnblogs.com/huangheng01/p/10517884.html
Copyright © 2011-2022 走看看