关于enctype="multipart/form-data"及过滤非法字符的问题
正常表单可以过去 但是带文件的就不能
求高手解决 qq30841197
public class MessageFilter implements Filter {
private FilterConfig config;
private GuoLvService guoLvService;
private List<GuoLv> guoLvs = new ArrayList<GuoLv>();
private Map<String, String> map = new LinkedHashMap<String, String>();
private Set<String> set = new HashSet<String>();
public void destroy() {
this.config = null;
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
request.setCharacterEncoding("GBK");
System.out.println("filter");
String param = "";
String paramValue = "";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
String s1 = request.getRequestURI();
if (!s1.contains("guolv")) {
guoLvs = guoLvService.findAll();
for (GuoLv g : guoLvs) {
map.put(g.getBefore(), g.getAfter());
}
set = map.keySet();
if (!isMultipart) {
Enumeration<Object> params = request.getParameterNames();
Map<String, String[]> m = new HashMap<String, String[]>(
request.getParameterMap());
while (params.hasMoreElements()) {
param = (String) params.nextElement();
String[] values = request.getParameterValues(param);
System.out.println(param + "" + Arrays.toString(values));
for (int i = 0; i < values.length; i++) {
paramValue = values[i];
//替换
for (String s : set) {
paramValue = paramValue.replaceAll(s, map.get(s));
}
values[i] = paramValue;
}
System.out.println(param + "--------------" + paramValue);
m.put(param, values);
}
request = new ParameterRequestWrapper(request, m);
}
if(isMultipart){
Map<String, String[]> m1 = new HashMap<String, String[]>(
request.getParameterMap());
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()){
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value =item.getString("gbk");
//out.println(name + "=" + value);
for (String s : set) {
value = value.replaceAll(s, map.get(s));
}
String[] v=new String[]{value};
request.setAttribute(name, value);
m1.put(name, v);
System.out.println(name+"======"+value);
} else{
//文件怎么处理???
}
}
request = new ParameterRequestWrapper(request, m1);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.config = arg0;
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(config.getServletContext());
guoLvService = (GuoLvService) wac.getBean("guoLvService");
}
}
class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params;
public ParameterRequestWrapper(HttpServletRequest request,
Map<String, String[]> newParams) {
super(request);
this.params = newParams;
}
@Override
public String getParameter(String name) {
String result = "";
Object v = params.get(name);
if (v == null) {
result = null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
result = strArr[0];
} else {
result = null;
}
} else if (v instanceof String) {
result = (String) v;
} else {
result = v.toString();
}
return result;
}
@Override
public Map getParameterMap() {
return params;
}
@Override
public Enumeration getParameterNames() {
return new Vector(params.keySet()).elements();
}
@Override
public String[] getParameterValues(String name) {
String[] result = null;
Object v = params.get(name);
if (v == null) {
result = null;
} else if (v instanceof String[]) {
result = (String[]) v;
} else if (v instanceof String) {
result = new String[] { (String) v };
} else {
result = new String[] { v.toString() };
}
return result;
}
}
class MultiPartRequestWrapper extends HttpServletRequestWrapper{
public MultiPartRequestWrapper(HttpServletRequest request) {
super(request);
// TODO Auto-generated constructor stub
}
}
求高手解决 qq30841197
public class MessageFilter implements Filter {
private FilterConfig config;
private GuoLvService guoLvService;
private List<GuoLv> guoLvs = new ArrayList<GuoLv>();
private Map<String, String> map = new LinkedHashMap<String, String>();
private Set<String> set = new HashSet<String>();
public void destroy() {
this.config = null;
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
request.setCharacterEncoding("GBK");
System.out.println("filter");
String param = "";
String paramValue = "";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
String s1 = request.getRequestURI();
if (!s1.contains("guolv")) {
guoLvs = guoLvService.findAll();
for (GuoLv g : guoLvs) {
map.put(g.getBefore(), g.getAfter());
}
set = map.keySet();
if (!isMultipart) {
Enumeration<Object> params = request.getParameterNames();
Map<String, String[]> m = new HashMap<String, String[]>(
request.getParameterMap());
while (params.hasMoreElements()) {
param = (String) params.nextElement();
String[] values = request.getParameterValues(param);
System.out.println(param + "" + Arrays.toString(values));
for (int i = 0; i < values.length; i++) {
paramValue = values[i];
//替换
for (String s : set) {
paramValue = paramValue.replaceAll(s, map.get(s));
}
values[i] = paramValue;
}
System.out.println(param + "--------------" + paramValue);
m.put(param, values);
}
request = new ParameterRequestWrapper(request, m);
}
if(isMultipart){
Map<String, String[]> m1 = new HashMap<String, String[]>(
request.getParameterMap());
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()){
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value =item.getString("gbk");
//out.println(name + "=" + value);
for (String s : set) {
value = value.replaceAll(s, map.get(s));
}
String[] v=new String[]{value};
request.setAttribute(name, value);
m1.put(name, v);
System.out.println(name+"======"+value);
} else{
//文件怎么处理???
}
}
request = new ParameterRequestWrapper(request, m1);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.config = arg0;
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(config.getServletContext());
guoLvService = (GuoLvService) wac.getBean("guoLvService");
}
}
class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params;
public ParameterRequestWrapper(HttpServletRequest request,
Map<String, String[]> newParams) {
super(request);
this.params = newParams;
}
@Override
public String getParameter(String name) {
String result = "";
Object v = params.get(name);
if (v == null) {
result = null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
result = strArr[0];
} else {
result = null;
}
} else if (v instanceof String) {
result = (String) v;
} else {
result = v.toString();
}
return result;
}
@Override
public Map getParameterMap() {
return params;
}
@Override
public Enumeration getParameterNames() {
return new Vector(params.keySet()).elements();
}
@Override
public String[] getParameterValues(String name) {
String[] result = null;
Object v = params.get(name);
if (v == null) {
result = null;
} else if (v instanceof String[]) {
result = (String[]) v;
} else if (v instanceof String) {
result = new String[] { (String) v };
} else {
result = new String[] { v.toString() };
}
return result;
}
}
class MultiPartRequestWrapper extends HttpServletRequestWrapper{
public MultiPartRequestWrapper(HttpServletRequest request) {
super(request);
// TODO Auto-generated constructor stub
}
}
...全文
相关推荐
如何解决在jsp页面上导入.xls文件报错问题
```html <form action="upload.jsp" method="post" enctype="multipart/form-data"> <!
基于Struts2.3的多文件批量上传/下载
```html <form action="upload.action" method="post" enctype="multipart/form-data"> <input type="file"
JSP上传文件
例如: ```html <form action="upload.jsp" method="post" enctype="multipart/form-data"> <input type="file"
上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数
标题提到的“上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数”是一个常见的技术挑战,特别是当使用HTML表单进行文件上传时。
解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`


Web 开发
