1、什么是Filter

Filter可认为是Servlet的一种特殊用法,主要是对用户发起的请求进行预处理或后处理,意思就是在请求到达用户想请求的地址之前先进入Filter,或者在离开用户请求之后进入Filter。Filter类似于门卫,你在进入之前门卫需要盘查你,身份合法进入,身份不合法拦截。

1.1、Filter过滤器的使用场景

1、对用户的请求进行统一认证,适合做权限管理。

2、对请求和响应进行加密处理。

3、对用户发送的请求或者响应的数据进行过滤处理。

4、对所有用户的请求或者响应进行记录,可以进行日志管理。

2、Filter的使用方式

说明1Filter的使用需要实现Filter接口,并重写doFilter方法

说明2:导包信息import javax.servlet.Filter;

说明3:当用户正在进行登录的时候需要放行。

2.1、创建Filter

public class LoginFilter implements Filter{
	//销毁方法
	public void destroy() {
	}
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		//将ServletRequest转化成HttpServletRequest
	  HttpServletRequest request=(HttpServletRequest)servletRequest;
        HttpServletResponse response=(HttpServletResponse)servletResponse;
        //获取当前用户的请求地址
        String url=request.getRequestURI();
        //如果请求的地址中包含login,就放行
        //如果用户正在通过login.jsp或者请求login.do进行登录,要放行。
        if(url.indexOf("login")>-1){
        	//放行
        	filterChain.doFilter(request, response);
        	return ;
        }
        HttpSession session=request.getSession();
        String username=(String)session.getAttribute("username");
        //如果username值为空,说明没有登录,因为登录成功后会将用户信息保存在session中。
        if(username!=null){
        	//放行
        	filterChain.doFilter(request, response);
        	return ;
        }
        //如果没有登录转发到login.jsp
        request.getRequestDispatcher("login.jsp").forward(request, response);
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

2.2、在web.xml中配置Filter信息

<!-- 自定义过滤器 -->
  <filter>
        <filter-name> LoginFilter </filter-name>
        <filter-class>com.it.filter. LoginFilter </filter-class>
    </filter>
    <filter-mapping>
        <filter-name> LoginFilter </filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
11-13 23:24