修復(fù)方案:
升級(jí)struts2版本:
產(chǎn)生影響:
文件上傳報(bào)錯(cuò):Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (cos)
修復(fù)方案:
1.將cos的jar包下載并放置WEB-INF/lib內(nèi)
2.創(chuàng)建一個(gè)org.apache.struts2.dispatcher.multipart.MultiPartRequest的實(shí)現(xiàn)類
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);
? ? ? ? }
? ? }
@Override
public void cleanUp() {
// TODO Auto-generated method stub
}
}
---------------------
作者:雨夜星辰03
來源:CSDN
原文:https://blog.csdn.net/qwerty1994/article/details/62422697
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
3.添加配置
<!-- 配置cos文件上傳的解析器 -->
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="cos" class="com.xxxxx.common.util.CosMultiPartRequest" />
<!--避免編號(hào)為CVE-2017-5638的該漏洞,-->
<!--影響系統(tǒng)及版本:Struts 2.3.5 - Struts 2.3.31、Struts 2.5 - Struts 2.5.10-->
<constant name="struts.multipart.parser" value="cos"></constant>