Skip to content

Latest commit

 

History

History
60 lines (42 loc) · 1.59 KB

自定义filter.md

File metadata and controls

60 lines (42 loc) · 1.59 KB

什么是Filter

Filter属于Servlet规范内的组件,用于过滤请求。

其运行原理类似于AOP,可以在请求前后执行部分逻辑。

如何自定义Filter

编写Filter类

public class MyFilter implements javax.servlet.Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
		// 请求处理之前
        chain.doFilter(request, response);
        // 请求处理之后
    }

    @Override
    public void destroy() {
    }
}

注册Filter

在普通的JAVA WEB项目中可以在web.xml中进行注册过滤器,但是在SpringBoot项目中不存在web.xml配置文件。

Servlet3提供了通过注解的方式注册Filter。也可以通过SpringBoot提供的方式注册Filter

Servlet 3 注解方式注册Filter

@javax.servlet.annotation.WebFilter(urlPatterns = "/*", filterName = "myFilter")
public class MyFilter implements javax.servlet.Filter {}

SpringBoot Bean 方式注册Filter

通过在Spring IOC中注册FilterRegistrationBean就可以自动注册过滤器。

@Bean
public FilterRegistrationBean<MyFilter> myFilter() {
    FilterRegistrationBean<MyFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new MyFilter());
    bean.addUrlPatterns("/*");
    bean.setName("myFilter");
    bean.setOrder(1);
    return bean;
}