当前位置: 代码迷 >> J2EE >> 关于enctype="multipart/form-data"及过滤器的怪异有关问题~
  详细解决方案

关于enctype="multipart/form-data"及过滤器的怪异有关问题~

热度:11558   发布时间:2013-02-25 21:39:58.0
关于enctype="multipart/form-data"及过滤器的怪异问题~~
目的:所有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 { 
// 正常表单,验证及 传递 都没有问题。。。。
  相关解决方案