日期:2014-05-19  浏览次数:20780 次

关于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);   // 这个地方改怎么写??