首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

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

2013-01-17 
关于enctypemultipart/form-data及过滤器的怪异问题~~目的:所有form提交的表单或地址栏传参的想过滤掉

关于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 { 
// 正常表单,验证及 传递 都没有问题。。。。


Enumeration  enumparam = request.getParameterNames();   
        while(enumparam.hasMoreElements()){   
                  String   paramName=(String)enumparam.nextElement();                       
                  String[]   values=request.getParameterValues(paramName);   
                  for(int   i=0;i<values.length;i++){   
                  System.out.println(paramName + "=" + values[i]);
                   for(String keyword : keywords){
                   if(values[i] != null && values[i].trim().indexOf(keyword.trim()) != -1){
                     response = (HttpServletResponse)response;
                     request.setAttribute("error", StringUtil.errorBack("您输入了敏感词汇,请慎重操作!", ""));
                     request.getRequestDispatcher("error.jsp").forward(request, response);
                   }
                   }
                  }   
        }
        System.out.println("普通表单");

chain.doFilter(request, response);

       }  upload action
[解决办法]
没碰到过这样的问题
[解决办法]
我也没碰过这种问题

热点排行