天天看点

16.集成过滤器Filter

1.Filter简介

Filter是过滤器的英文名称,它是处于客户端和服务器资源文件之间的一道过滤网。通过Filter可实现URL级别的权限访问控制、敏感词汇过滤以及响应信息压缩等一些高级功能。

2.全局访问过滤器开发

复制一份“集成MyBatis”的项目代码,修改项目名称为filter。然后在项目目录“/src/main/java/com/leichuangkj/filter”下新建filter目录,并在filter目录下新建RequestFilter类,具体代码如下。

@WebFilter(filterName = "RequestFilter", urlPatterns = "/*")
public class RequestFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("---------->>> init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        System.out.println("---------->>> doFilter");
        System.out.println("请求ip:" + servletRequest.getRemoteAddr());
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("---------->>> destory");
    }
}      
  • @WebFilter:用于将一个类声明为过滤器,该注解将会在应用部署时被容器处理,容器根据具体的属性配置将相应的类部署为过滤器。这样在Web应用中使用监听器时,便不需要在web.xml中配置监听器的描述信息。
  • filterName:指定过滤器的name,等价于XML配置文件中的filter-name标签。
  • urlPatterns:指定过滤器的URL匹配模式,等价于XML配置文件中的url-pattern标签。

3.启动项目

在启动类FilterApplication上添加注解@ServletComponentScan,然后启动项目。

@MapperScan(basePackages = "com.leichuangkj.filter.dao.mapper")
@ServletComponentScan
@SpringBootApplication
public class FilterApplication {
  public static void main(String[] args) {
    SpringApplication.run(FilterApplication.class, args);
  }
}      
  • @ServletComponentScan:使用该注解后,Servlet、Filter、Listener可直接通过@WebServlet、@WebFilter和@WebListener注解自动注册。

4.测试

启动项目,然后在postman中请求“http://localhost:8080/user/findByName”,可在IDEA控制台查看到如下信息。

16.集成过滤器Filter