package com.demo.filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 自定义HttpFilter,实现Filter接口 */ public abstract class HttpFilter implements Filter { //用于保存filterConfig对象 private FilterConfig filterConfig; /** * 不建议子类直接覆盖,若直接覆盖,有可能会导致filterConfig成员变量初始化失败 * @param filterConfig * @throws ServletException */ @Override public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; init(); } /** * 供子类继承的初始化方法,可以通过getFilterConfig()获取FilterConfig对象 */ protected void init() { } /** * 直接返回init(ServletConfig)的FilterConfig对象 * @return */ public FilterConfig getFilterConfig() { return filterConfig; } /** * 原生的doFilter方法,在方法内部把ServletRequest和ServletResponse * 转为了HttpServletRequest和HttpServeltResponse,并调用了doFilter(HttpServletResponse response, HttpServletRequest request,FilterChain filterChain) * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; doFilter(request,response,filterChain); } //抽象方法,为Http请求定制,必须实现的方法 public abstract void doFilter(HttpServletResponse response, HttpServletRequest request,FilterChain filterChain) throws IOException, ServletException; @Override public void destroy() {} }