• Spring boot配置拦截器(Interceptor)和监听器(Listener)


    先贴一段拦截器和监听器概念的文字(来自https://www.jianshu.com/p/0d1f062dcd0d):

    1、拦截器:

    • 依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架;
    • 在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用;
    • 缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理;
    • 由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。

    2、监听器

    • 实现了javax.servlet.ServletContextListener 接口的服务器端程序;
    • 随web应用的启动而启动;
    • 只初始化一次;
    • 随web应用的停止而销毁;
    • 主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。如SpringMVC的监听器org.springframework.web.context.ContextLoaderListener,实现了SpringMVC容器的加载、Bean对象创建、DispatchServlet初始化等。

    进入主题

    1.拦截器的实现方法有两种 实现Interceptor 接口 或者 继承HandlerInterceptorAdapter类,实现接口需要实现其中所有方法,继承抽象类则一般实现preHandle方法即可。

    例如我下面实现Interceptor接口的拦截器,状态码为404便重定向跳转到404页面

    逻辑配置

    @Component("errorPageInterceptor")
    public class ErrorPageInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
            Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
            if(statusCode!=null) {
                if (statusCode == response.SC_NOT_FOUND) {
                    response.sendRedirect(request.getContextPath()+"/404.html");
                    return false;
                }
            }
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                               ModelAndView modelAndView) throws Exception {
        }
    
        @Override
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
                                    Object o, Exception e) throws Exception {
        }
    }
    逻辑配置

    拦截器配置,核心是在继承WebMvcConfigurerAdapter类里重写addInterceptors方法

    @Configuration
    public class HomeOpenHandlerConfigration extends WebMvcConfigurerAdapter {
    
        @Autowired
        @Qualifier("errorPageInterceptor")
        private HandlerInterceptor errorPageInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 多个拦截器组成一个拦截器链
            // addPathPatterns 用于添加拦截规则
            // excludePathPatterns 用户排除拦截
            registry.addInterceptor(errorPageInterceptor).addPathPatterns("/**");
            super.addInterceptors(registry);
        }
    }
    拦截器配置

    如此就可实现拦截器。

    2.java web中Listener分为三大类:

    ServletContextListener:监控servletContext的创建、销毁等。

    HttpSessionListener:用来监控session的创建,销毁等

    ServletRequestListener:用于监控servlet上下文request
    下面我们来实现一个SessionListener
    @Component
    public class SessionListener implements HttpSessionListener {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Override
        public void sessionCreated(HttpSessionEvent event) {
            System.out.println("创建session");
        }
        @Override
        public void sessionDestroyed(HttpSessionEvent event) {
           System.out.println("销毁session");
        }
    
    }
    SessionListener逻辑配置

     监听器配置,核心是是在继承WebMvcConfigurerAdapter类里注入Listener对应的Bean

    public class WebApplicationConfig extends WebMvcConfigurerAdapter
    {    @Bean
        public ServletListenerRegistrationBean<SessionListener> SessionListenerBean() {
            return new ServletListenerRegistrationBean<SessionListener>(new SessionListener());
        }
    }
    监听器配置
  • 相关阅读:
    如何将SLIC集成到ESXi中
    System Board Replacement Notice
    分发器上的会话代理进程控制脚本使用说明
    lib和dll的区别与使用
    vs2017自动生成的#include“stdafx.h”详解及解决方案
    禅定是否一定要打坐,为什么?
    PE文件解析 基础篇
    灵修书籍
    HDU 2546 饭卡(01背包裸题)
    codeforces 767A Snacktower(模拟)
  • 原文地址:https://www.cnblogs.com/Lin-Ff2394/p/11766070.html
Copyright © 2020-2023  润新知