struts2文件上传修改为cos框架处理一系列事情
来源:互联网 发布:sop制作软件 编辑:程序博客网 时间:2024/06/10 02:19
前段时间Struts2出来一个编号CVE-2017-5638的漏洞,影响系统及版本:Struts 2.3.5 - Struts 2.3.31、Struts 2.5 - Struts 2.5.10!
项目经理简单修复了一下,他直接在配置文件中新增了这么个属性!
属性如下:
<constant name="struts.multipart.parser" value="cos"></constant>
也没测试,过了几天客户反应文件个图片不能上传了!叫我去看看,我一看发现后台报错了!
报错如下:
java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (cos) - [unknown location] at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:132) at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:514) at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:524) at com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:555) at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:584) Truncated. see log file for complete stacktraceCaused By: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (cos) - [unknown location] at org.apache.struts2.config.BeanSelectionProvider$ObjectFactoryDelegateFactory.create(BeanSelectionProvider.java:468) at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:130) at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:514) at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:524) at com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:555) Truncated. see log file for complete stacktrace
后面各种百度,发现了这么一个博客!
博客链接:http://www.cnblogs.com/pigtail/archive/2013/02/12/2910348.html
其实当时红色部分提示的很清楚了,要加入相应的jra包!
后面又参考了博客:http://www.iteye.com/topic/316626
按照他写了一个实现类,加上配置文件
<!-- 配置cos文件上传的解析器 --><bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="cos" class="com.nuchina.common.util.CosMultiPartRequest" />
准确的做法应该如下:
1.加入cos.jar
2.创建一个实现org.apache.struts2.dispatcher.multipart.MultiPartRequest接口的类
package com.nuchina.common.util;import java.io.File;import java.io.IOException;import java.util.Collections;import java.util.Enumeration;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.StrutsConstants;import org.apache.struts2.dispatcher.multipart.MultiPartRequest;import com.opensymphony.xwork2.inject.Inject;import com.oreilly.servlet.MultipartRequest;public class CosMultiPartRequest implements MultiPartRequest { private MultipartRequest multi; private String defaultEncoding; private boolean maxSizeProvided; private int maxSize; @Inject(StrutsConstants.STRUTS_I18N_ENCODING) public void setDefaultEncoding(String defaultEncoding) { this.defaultEncoding = defaultEncoding; } @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE) public void setMaxSize(String maxSize) { this.maxSizeProvided = true; this.maxSize = Integer.parseInt(maxSize); } @Override public String[] getContentType(String fieldName) { return new String[] { multi.getContentType(fieldName) }; } @SuppressWarnings("unchecked") @Override public List getErrors() { return Collections.EMPTY_LIST; } @Override public File[] getFile(String fieldName) { return new File[] { multi.getFile(fieldName) }; } @Override public String[] getFileNames(String fieldName) { return new String[] { multi.getFile(fieldName).getName() }; } @SuppressWarnings("unchecked") @Override public Enumeration<String> getFileParameterNames() { return multi.getFileNames(); } @Override public String[] getFilesystemName(String name) { return new String[] { multi.getFilesystemName(name) }; } @Override public String getParameter(String name) { return multi.getParameter(name); } @SuppressWarnings("unchecked") @Override public Enumeration<String> getParameterNames() { return multi.getParameterNames(); } @Override public String[] getParameterValues(String name) { return multi.getParameterValues(name); } @Override public void parse(HttpServletRequest request, String saveDir) throws IOException { if (maxSizeProvided) { multi = new MultipartRequest(request, saveDir, maxSize, defaultEncoding); } else { multi = new MultipartRequest(request, saveDir, defaultEncoding); } }@Overridepublic void cleanUp() {// TODO Auto-generated method stub}}
3.配置文件注册自己创建的bean
4.配置struts.multipart.parser属性为cos
<!-- 配置cos文件上传的解析器 --><bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="cos" class="com.xxxxx.common.util.CosMultiPartRequest" /><!--避免编号为CVE-2017-5638的该漏洞,--><!--影响系统及版本:Struts 2.3.5 - Struts 2.3.31、Struts 2.5 - Struts 2.5.10--><constant name="struts.multipart.parser" value="cos"></constant>
0 0
- struts2文件上传修改为cos框架处理一系列事情
- 手工处理 Struts2 框架上传的文件
- 手工处理 Struts2 框架上传的文件
- cos在Struts2上传文件IO报错及其解决方案
- 文件上传-Struts2框架
- Struts2 框架文件上传
- 用cos上传文件!
- 用cos上传文件
- COS 文件上传事例
- cos 上传文件
- 用cos文件上传
- cos 文件上传
- cos上传文件
- COS多文件上传
- jsp中利用cos进行web文件上传(修改版)
- Struts2框架的文件上传
- struts2框架-------文件上传机制
- Struts2 框架上传文件问题
- Good学习网址书签
- Redis 安装
- hibernate 映射文件中id 及id Generator的详解
- php:从url中提取扩展名
- GC 日志分析工具 —— GChisto
- struts2文件上传修改为cos框架处理一系列事情
- 2012年第三届蓝桥杯C/C++程序设计本科B组省赛题目 古堡算式 结果填空
- 内网ip端口不通、端口被屏蔽的解决方法,全端口映射
- MySQL表的四种分区类型
- C语言之可变参数列表
- Android--在手机SD卡上新建一个自定义文件夹并在新建文件夹目录下新建一个文件
- poj3253 Fence Repair 贪心/优先队列
- 利用百度地图 接口 获取当前所在的省份
- idea和ecplise快捷键总结