Filter概述及快速入门

发布时间 2023-04-24 16:42:53作者: YE-

Filter概述及快速入门

Filter概述:

概念: Filter表示过滤器, 是JavaWeb三大组件之一

JavaWeb三大组件: Servlet, Filter, Listener

过滤器可以把对资源的请求拦截下来, 从而实现一些特殊的功能

过滤器一般完成一些通用的操作:

比如: 权限控制, 统一编码处理, 敏感字符处理等

还有就是在访问某个网站的时候要先判断是否登录, 不能直接就通过导航栏直接进入到网站登录之后的页面中, 只要是尝试登录到网站内部的时候我们都应该先进行一个判断, 判断是否已经登录, 如果没有登录的时候就跳转到登录页面, 让其进行登录操作, 这样的操作也应该是在过滤器(Filter)中实现的

快速入门:

1.定义类, 实现Filter接口, 并重写其中所有的抽象方法

>Filter接口全类名: javax.Servlet.Filter
package com.ffyc.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//配置拦截路径
@WebFilter("/main5")
public class FilterDemo implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    }

    @Override
    public void destroy() {
    }
}

2.配置Filter拦截的资源的路径

就是在类上定义@WebFilter注解
这里并不是配置过滤器的访问路径, 而是配置拦截路径, 就是当我们访问的资源的路径满足我们的拦截路径的匹配的时候就会执行对应的过滤器

当将Filter拦截路径的值设置为"/*"之后就表示所有的资源都会拦截

//配置拦截路径
@WebFilter("/main5")
public class FilterDemo implements Filter {

这里就表示拦截访问路径为http://ip:port/工程路径/main5”的资源的请求

这里的/mian5中的/显然是由服务器解析, 如果是服务器解析, 那么"/"就是表示http://ip:port/工程路径

3.在doFilter方法中输出一句话,并放行(这里只是做一个测试, 所以我们选择输出一句话)


import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//配置拦截路径
@WebFilter("/main5")
public class FilterDemo implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //不具体实现
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter被执行了");

        //放行 --- > 放行之后会立即去执行Servlet中的service()方法
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        //不具体实现
    }
}