-
创建Filter类
创建一个class类 -
重写过滤器的doFilter(request,response,chain)方法。
另外两个init()、destroy()方法一般不需要重写。在doFilter方法中进行过滤操作。
-
配置xml文件
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>crm.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
filter-class指明过滤器类所在的包路径。
url-pattren定义过滤器作用的对象,客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。
拦截对象:
1.所有web资源:/*
。
2.作用于某一文件夹下所有文件:/dir/*
3.作用于某一种类型的文件:*.扩展名
过滤多个文件可以配置多个filter-mapping
如下图所示
- doFilter方法重写
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
System.out.println("3. 执行过滤器业务处理方法");
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
Object o = request.getSession().getAttribute("flag");
if(o != null){
chain.doFilter(request, response);
System.out.println("4. Servlet处理完成,又回到过滤器");
}else{
//获取请求路径
String URI = request.getRequestURI();
StringBuffer URL = request.getRequestURL();
System.out.println("URI是什么="+request.getRequestURI());
System.out.println("URL是什么="+request.getRequestURL());
if(URI.endsWith("login.jsp")){
chain.doFilter(request, response);
System.out.println("4. Servlet处理完成,又回到过滤器");
}else{
response.sendRedirect("login.jsp");
}
}
}