JavaWeb过滤器(Filter)详解
Filter:过滤器
1.概念:
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
过滤器的作用:一般用于完成通用的操作,如登录验证、统一编码处理、敏感字符过滤等等。
2.Filter接口源码
public interface Filter { default void init(FilterConfig filterConfig) throws ServletException { } void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException; default void destroy() { } }
注意:通过查看源码我们发现,只有doFilter方法没有实现,我们可以只重写doFilter方法,其他两个方法可以不重写
过滤器的生命周期方法:
(1)init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次,用于加载资源
(2)doFilter:每一次请求被拦截资源时,会执行。执行多次
(3)destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法,只执行一次。用于释放资源
3.Filter的快速入门
@WebFilter("/*")//注解配置 public class FilterDemo implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("对request进行过滤"); filterChain.doFilter(servletRequest,servletResponse); //放行 System.out.println("对response进行过滤"); } }
4.Filter配置拦截路径
(1)web.xml配置
<filter> <filter-name>写filter的名字</filter-name> <filter-class>写filter的全类名路径</filter-class> </filter> <filter-mapping> <filter-name>写filter的名字</filter-name> <url-pattern>写拦截路径</url-pattern> </filter-mapping>
(2)注解配置:查看源码得以下配置项
filterName:该filter的名字
initParams:初始化参数
displayName:filter显示名称
servletNames:指定对哪些servlet进行过滤
asyncSupported:是否支持异步模式
urlPatterns:指定拦截路径
value:指定拦截路径
注意:urlPatterns和value是一样的。urlPatterns和value只能配置一个,不能两个都配置,两个都配置就会报错。
实例:
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")