目的:所有form提交的表单或地址栏传参的想过滤掉敏感词,所以写了一个过滤器,过滤普通的表单没有问题,但是当form中有enctype="multipart/form-data" 的时候,就出现问题了。 从网上查了N多资料,说是二进制什么的,在过滤器中修改了一下,可以验证是否存在敏感词了,但是chain.doFilter(request, response)之后 在Action中 确拿不到表单提交过来的值了。求高手帮助:这个过滤器该怎么写?
我的过滤器代码 如下:
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (isMultipart) {
System.out.println("上传文件的表单");
org.apache.commons.fileupload.FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items;
try {
items = upload.parseRequest(req);
Iterator iter = items.iterator();
while (iter.hasNext()) {
org.apache.commons.fileupload.FileItem item = (org.apache.commons.fileupload.FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString("UTF-8");
System.out.println(name + "===" + value);
// 这个地方 打印正常,也就是说 可以拿到表单的值 for(String keyword : keywords){
if(value != null && value.trim().indexOf(keyword.trim()) != -1){
response = (HttpServletResponse)response;
request.setAttribute("error", StringUtil.errorBack("您输入了敏感词汇,请慎重操作!", ""));
request.getRequestDispatcher("error.jsp").forward(request, response);
}
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
chain.doFilter(request, response); // 这个地方改怎么写???
} else {
// 正常表单,验证及 传递 都没有问题。。。。