Springboot--使用@WebFilter-web过滤器

一、使用@WebFilter-web过滤器

web三大组件之一,其他两个是@WebListener,Intecepter

1、启动类添加@ServletComponentScan

@ServletComponentScan
@SpringBootApplication
publicclass Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

2、自定义WebFilter

@Slf4j
@WebFilter
publicclass ReqFilter implements Filter {
    public ReqFilter() {
        System.out.println("init reqFilter");
    }

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

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        log.info("url={}, params={}", req.getRequestURI(), JSON.toJSONString(req.getParameterMap()));
        chain.doFilter(req, response);
    }

    @Override
    public void destroy() {
    }
}

3、WebFilter的常用属性如下

filterName String 指定过滤器的 name 属性,等价于
value String[] 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
urlPatterns String[] 指定一组过滤器的 URL 匹配模式。等价于标签。
servletNames String[] 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中的取值。
dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams WebInitParam[] 指定一组过滤器初始化参数,等价于标签。
asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于标签。
description String 该过滤器的描述信息,等价于标签。
displayName String 该过滤器的显示名,通常配合工具使用,等价于标签。

4、设置Filter的优先级

注意**@Order 注解不能指定 Filter 优先级**

@WebFillter 方式注册的默认优先级为2147483647,采用Bean注册的方式优先级可以指定。

@Bean
public FilterRegistrationBean orderFilter() {
    FilterRegistrationBean filter = new FilterRegistrationBean<>();
    filter.setName("reqFilter");
    filter.setFilter(new ReqFilter());
    // 指定优先级
    filter.setOrder(-1);
    return filter;
}

二、直接通过Bean的方式注册拦截器,指定优先级

@Order(1)
@Component
public class ReqFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("req filter");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

@Order(10)
@Component
public class OrderFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("order filter!");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

你可能感兴趣的:(Springboot实战专栏,spring,boot,前端,java)