【Spring Boot】自定义过滤器的实现

【项目需求】

在新项目中,有些接口和旧系统一样,在调用之前,需要进行一系列的验证,类似于这种过滤功能,我们可以使用拦截器实现,也可以使用过滤器实现。

【SpringMVC方式】

在实现Spring Boot项目中的过滤器之前,先回顾下SpringMVC框架的项目中,自定义过滤器是如何实现的。

- 自定义过滤器类,实现Filter,代码如下:

public class LoginFilter 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() {

    }
}

- 在web.xml中配置,什么情况下需要进行过滤

<filter>
  <filter-name>loginFilter</filter-name>
   <filter-class>com.springmvc.LoginFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>loginFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

- 如果请求匹配到多个过滤器,则执行的顺序是按照在xml中配置的顺序来的。所以如果需要考虑filter的执行顺序,按顺序配置即可。

【SpringBoot方式】

在SpringBoot项目中,省去了springmvc中的xml配置代码,直接一个类加上几个注解即可实现自定义的过滤器,代码如下:

@Component
@ServletComponentScan
@WebFilter(urlPatterns = "/login/*",filterName = "loginFilter")
@Order(1)
public class LoginFilter 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() {

    }
}

- @Component 这个注解的目的是将LoginFilter交给容器来处理。也就是让LoginFilter起作用

- @ServletComponentScan 这个是用来扫描@WebFilter 的,让@WebFilter起作用。

- @WebFilter 是用来配置针对于什么链接做过滤,filter的名称是什么。

- @Order是用来定义过滤器的执行顺序,多个过滤器的情况下,值越小,过滤器越先被执行。

【总结】

以上就是自定义过滤器的实现方式,比较简单,但不用心写代码,一个简单的filter也会出问题,下篇博客再写。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页