因为struts2漏洞由Struts2升级为struts2.3.15.1后出现的问题
这个bug是由Struts2上传文件后return SUCCESS后报的错误:
java.lang.AbstractMethodError: be.telio.mediastore.ui.upload.GarryMultiPartRequest.cleanUp()V
at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.cleanUp(MultiPartRequestWrapper.java:271)
at org.apache.struts2.dispatcher.Dispatcher.cleanUpRequest(Dispatcher.java:837)
at org.apache.struts2.dispatcher.ng.PrepareOperations.cleanupRequest(PrepareOperations.java:103)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:103)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
各位大侠有没有解决方法。
可以了解一下struts2漏洞的严重性。
http://blog.csdn.net/huifeng773950918/article/details/9851015 漏洞 bug J2EE Struts2
[解决办法]
be.telio.mediastore.ui.upload.GarryMultiPartRequest.cleanUp你这个类是干嘛的,接口?
[解决办法]
是不是JAR包有冲突
[解决办法]
这个是Struts2的接口?这个看上去更像是第三方的文件上传解析类,你项目中应该是用了这个类替换了struts2默认的org.apache.struts2.multipart.JakartaMultiPartRequest这个文件上传的解析类
如果没什么必要不用去换它的
------解决方案--------------------
private List<FileItem> parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException {
DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setSizeMax(maxSize);
/*把进度监听器放进去,文件上传的源码中每次上传的进度都会反映到这个监听器里面
在这里把进度放入session中*/
upload.setProgressListener(new ProgressListener(){
/*第一个参数是当前总共读取的字节数,第二个参数是当前提交的内容总大小(这里就包括了整个表单的内容大小不仅是文件的大小),第三个参数是当前已经多了几次了*/
public void upload(long readBytes,long contentLength,int item){
HttpSession session=ServletActionContext.getRequest().getSession();
/*把当前总共读取到的字节数以及总大小都放入session中,前台就可以用ajax每0.5秒从session中取出进度*/
session.setAttribute("currentProgress",readBytes);
session.setAttribute("contentLength",contentLength);
}
});
return upload.parseRequest(createRequestContext(servletRequest));
}