Filter
1.概述
JavaWeb三大组件之一,其余两大组件是:Servlet程序和Listener监听器
JavaEE规范,是一个接口
作用:拦截请求、过滤响应
2.使用步骤:
1.编写一个类去实现 Filter 接口
2.实现过滤方法 doFilter()
3.到 web.xml 中去配置 Filter 的拦截路径
Filter 接口有三个方法:反应了 Filter 的生命周期。
- init:只会在 web 程序加载的时候调用,即启动如tomcat等服务器时调用。一般负责加载配置的参数。初始化
- destroy :web程序卸载的时候调用。一般负责关闭某些容器等。销毁
- doFilter:每次客户端请求都会调用一次。Filter 的所有工作基本都集中在该方法中进行。过滤
代码练习
package com.su.filter;
import com.su.Bean.User;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter...init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter...执行过滤");
//先把ServletRequest、ServletResponse转换为HttpServletRequest和HttpServletResponse
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
//1.获取请求的资源名称
String path = request.getServletPath();
System.out.println(path);
//2.从session中获取登录的用户信息......session中有用户信息表示已登录,没有用户信息表示未登录
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
//System.out.println(user);
//index.jsp、login.jsp、error.jsp、register.jsp、login、register这些页面或地址请求放行
if(path.equals("/index.jsp") || path.equals("/login.jsp") || path.equals("/error.jsp") || path.equals("register.jsp") ||
path.equals("/login") || path.equals("/register") ){
//满足以上条件放行
filterChain.doFilter(servletRequest,servletResponse);
}else if(user!=null){
//session中有用户信息表示已登录,没有用户信息表示未登录,已登录则放行
filterChain.doFilter(servletRequest,servletResponse);
}else{
response.sendRedirect("login.jsp");
}
}
@Override
public void destroy() {
System.out.println("Filter...destroy");
}
}
进入首页,再进入zhuye.jsp被拦截;控制台日志信息