struts2漏洞爆发,近日修补漏洞,struts2.3.4.1升级到struts2.3.15.1,发现以前用uploadFile能正常上传文件显示进度条现在不能正常工作了,List items = upload.parseRequest(request),items为空,得不到HttpServletRequest值了。

    研究了一天,也在网上转了一天,终于得到灵感,查看了一下struts2.3.15.1的struts-default.xml配置文件,发现<constant name=”struts.multipart.handler” value=”jakarta” />已经变成了parser,在原来的项目中把struts.multipart.handler换成了struts.multipart.parser,一切OK,正常了。

配置完成了,就可以直接利用uploadFile中的监听器来完成文件上传进度的判断了和上传文件了。

 

这是struts2.3.15.1的默认配置

<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="struts" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default"/>

    <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" />

    <constant name="struts.multipart.parser" value="jakarta" />

 

 

Struts2 中用Fileupload上传文件得不到HttpServletRequest值的解决办法

 

因为 struts-default.xml不能直接修改,所以要在struts.xml中追加一些配置

1.在status2 .3.4.1的配置文件struts.xml的struts里加上

 

<bean      type= "org.apache.struts2.dispatcher.multipart.MultiPartRequest" 

name= "myRequestParser"  class= "com.pojName.myUploadUtil.ParseWrapper" 
scope= "default"   optional= "true "   /> 

<constant   name= "struts.multipart.handler"   value= "myRequestParser"   />
2.在com.pojName.myUploadUtil包下写一个java类

class

public class RequestParseWrapper  extends JakartaMultiPartRequest   {



public void parse(HttpServletRequest servletRequest,  String   saveDir)throws   IOException{   

    } 

}

这样就可以得到request里的item的值了。

附注:<constant>标签用来配置常量。

  • <!--上传文件的大小限制,默认的情况下struts2是不接收的也就是说struts2不接收超过他默认大小限制的文件  

  • 注:上传文件的大小不是单文件的大小而是上传文件总数的大小-->

  • <constantname="struts.multipart.maxSize"value="10701096"/>

  •  

  • <!--设置上传的临时文件保存目录,默认值是javax.servlet.context.tempdir -->

  • <constantname="struts.multipart.saveDir"value="d:/"></constant>

  •  

  • <!-- 该属性指定处理multipart/form-data的MIME类型(文件上传)请求的框架,该属性支持cos、pell和jakarta等属性值,即分别对应使用cos的文件上传框架、pell上传及common-fileupload文件上传框架。该属性的默认值为jakarta. -->

  • <constantname="struts.multipart.parser" value="jakarta"></constant>

  •  

  • 个人理解:新版本的struts2不再走<constant name=”struts.multipart.handler” value=”jakarta” />

  • <constant name=”struts.multipart.parser” value=”jakarta” />