在过滤器中过滤非法url时发生的转向及过滤问题

来源:互联网 发布:浏览器表单数据 编辑:程序博客网 时间:2024/04/29 05:14

各位前辈:

由于小弟想用model2实现一个过滤器,具体的业务是:将用户输入的url跟已经保存在xml文件中的合法url进行匹配,处理结果是:如果匹配成功,则跳转至用户指定的页面;如果没有匹配成功,则跳转到指定的错误页面,提示用户url输入有误,现在那程序说话:

1、这是过滤器的实现:

 import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class DispatcherToIndex implements Filter {

 public void destroy() {
  // TODO Auto-generated method stub
  System.out.println("销毁");
 }

 public void doFilter(ServletRequest req, ServletResponse resp,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  HttpServletRequest request = (HttpServletRequest) req;
  HttpServletResponse response = (HttpServletResponse) resp;
  String uri = request.getRequestURI(); // 获取用户输入的uri地址
  String path = request.getContextPath();
  uri = uri.substring(path.length());
  System.out.println(uri);
  // 读取xml文件
  File f = new File("F://软件工程//software//jsp//prjShoppingV4.17//url.xml");
  SAXReader reader = new SAXReader();
  try {
   Document doc = reader.read(f); // 将读取的xml文件读取成文档对象
   Element root = doc.getRootElement(); // 得到根节点;
   Element foo;
   for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
    foo = it.next();
    if (uri.endsWith(foo.elementText("path"))) {
     // 如果输入的页面在解析出来的范围中,则显示正确信息
     request.getRequestDispatcher("/index.jsp");
     chain.doFilter(request, response);
    } else if(!uri.contains(foo.elementText("path"))) {
     // 如果不在范围之内,则跳转至错误页面
     request.setAttribute("errorMsg", "访问页面出错");
     request.getRequestDispatcher("error.jsp").forward(request, response);
    }

   }
  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println(uri);
 }

 public void init(FilterConfig filterConfig) throws ServletException {
  // TODO Auto-generated method stub
  System.out.println("初始化");
 }

}

 

2、配置过滤器

<!-- 这是过滤非法url的过滤器 -->
  <filter>
   <filter-name>DispatcherToIndex</filter-name>
   <filter-class>com.fendou.system.filter.DispatcherToIndex</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>DispatcherToIndex</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>

 

原创粉丝点击