springboot (2.0) 设置监听器,过滤器,拦截器

springboot (2.0) 设置监听器,过滤器,拦截器

github:springboot2.0
项目名:springboot-filter

1.项目结构和配置顺序

这里写图片描述

1.1配置顺序

listener

  1. @WebListener声明为listen类
  2. @ServletComponentScan开启需要扫描的listener类文件,相当于listener启动类
  3. implements ServletContextListener 接口,重写contextInitialized(初始化时启动),contextDestroyed(销毁时启动)。

filter

  1. @WebFilter配置过滤器名和url策略
  2. implement filter接口,并重写方法init(初始化),doFilter(调用时),destory(销毁时)。

interceptor

  1. @component 声明为注入类
  2. implements HandleIntercept 接口并重写preHandle(请求处理前),postHandle(请求处理后),afterCompletion(渲染视图后,用于资源清理)
  3. @Configuration 配置拦截器启动类,extends WebMvcConfigurationSupport实体并重写addInterceptors(配置拦截器url),addResourceHandlers(配置拦截器静态资源),记得生成interceptor实例调用(重要)

2.配置文件

mylistener

@WebListener
@ServletComponentScan("com.plumblum.servlet")
public class MyListener implements ServletContextListener {

    private static Logger LOG = LoggerFactory.getLogger(MyListener.class);
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        LOG.info("myListener 初始化...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        LOG.info("myListener 销毁...");
    }
}

myfilter

//过滤的请求不会经过controller层
@WebFilter(filterName="MyFilter",urlPatterns="/getAll/*")
public class MyFilter implements Filter {

    private static Logger logger = LoggerFactory.getLogger(MyFilter.class);
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
     logger.info("初始化过滤器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        String requestURI = req.getRequestURI();
        logger.info("过滤到的请求--->"+requestURI);
    }

    @Override
    public void destroy() {

    }
}

myinterceptor

@Component
public class MyInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         System.out.println(">>>MyInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(">>>MyInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(">>>MyInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet");
        // 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
    }
}

配置interceptor启动类

//拦截器配置类
@Configuration
    public class MyWebMvcConfigurerAdapter extends WebMvcConfigurationSupport {

    //  配置拦截器实体(很重要)
    @Bean
    MyInterceptor  myInterceptor(){
        return new MyInterceptor();
    }

//    配置拦截器url
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //addPathPatterns 用于添加拦截规则
        //excludePathPatterns 用于排除拦截
        registry.addInterceptor(myInterceptor()).addPathPatterns("/*");
//                .excludePathPatterns("/hello/getAll");
        super.addInterceptors(registry);

    }
    /**
     * 配置静态资源
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        System.out.println("配置不拦截静态资源");
//        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }




}

3.启动测试结果

这里写图片描述

4.执行流程和对比图

4.1执行流程

这里写图片描述
这里写图片描述

4.2对比图

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值