当前位置: 首页 > news >正文

一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么

java  过虑器 、拦截器 、监听器的区别?

  1. 实现原理‌:

    • 过滤器基于函数回调实现。
    • 拦截器基于Java的反射机制实现。
    • 监听器用于监听特定事件的发生,并作出相应处理。
  2. 使用范围‌:

    • 过滤器依赖于Tomcat等容器,主要用于Web程序。
    • 拦截器不依赖于servlet容器,可应用于Web程序、Application、Swing等。
    • 监听器同样可用于监听Web程序中的特定事件。

        过滤器的应用场景

                1、过滤敏感词汇(防止sql注入)
                2、设置字符编码
                3、URL级别的权限访问控制
                4、压缩响应信息
        拦截器的应用场景
                1、登录验证,判断用户是否登录。
                2、权限验证,判断用户是否有权限访问资源,如校验token
                3、日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
                4、处理cookie、本地化、国际化、主题等。
                5、性能监控,监控请求处理时长等。
                6、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用

  1. 触发时机‌:

    • 过滤器在请求进入Servlet之前和响应返回给前端之前进行预处理。
    • 拦截器在请求进入Servlet后,但在进入Controller之前进行预处理。
    • 监听器在特定事件发生时触发,如Servlet生命周
    • 过滤器、拦截器和监听器的简单示例期中的创建、初始化、销毁等。

过滤器、拦截器和监听器的简单示例

import javax.servlet.*;
import java.io.IOException;public class SimpleFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 过滤器初始化时执行的方法System.out.println("Filter initialized");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求处理之前可以添加逻辑System.out.println("Before request processing");chain.doFilter(request, response); // 将请求传递给下一个过滤器或目标资源// 在请求处理之后可以添加逻辑System.out.println("After request processing");}@Overridepublic void destroy() {// 过滤器销毁时执行的方法System.out.println("Filter destroyed");}
}
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SimpleInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 在请求处理之前进行调用(Controller方法调用之前)System.out.println("Before Controller method");return true; // 只有返回true才会继续向下执行,返回false取消当前请求}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)System.out.println("After Controller method, before view rendering");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要用于进行资源清理工作)System.out.println("After view rendering");}
}
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class SimpleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {// 当ServletContext被初始化时调用System.out.println("ServletContext initialized");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {// 当ServletContext被销毁时调用System.out.println("ServletContext destroyed");}
}

如何配置过滤器、拦截器和监听器?

@Component
public class MyFilter implements Filter {// 实现doFilter等方法
}// 拦截器 注入
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");}
}@Component
public class MyListener implements ServletContextListener {// 实现contextInitialized、contextDestroyed等方法
}

http://www.lryc.cn/news/435998.html

相关文章:

  • 本体映射与本体集成
  • 华媒舍:10种提升推特大V发文推广曝光率的方式
  • 前端本地存储数据:深入解析与代码示例(Cookie、LocalStorage、SessionStorage和IndexedDB)
  • Java语言程序设计基础篇_编程练习题*18.21 (将十进制数转换为二进制数)
  • 中年转行新可能:18 个月迈向大模型提示词工程师
  • C++通过返回值和输出参数的原理是什么?分别有什么优势和缺点?
  • AI客服机器人开启企业客户服务新纪元
  • TPM项目课题的确定需要考虑哪些因素?
  • Rust 数据类型
  • C#无标题栏窗体拖动
  • MySQL容器配置连接数数,镜像重启生效
  • 《OpenCV计算机视觉》—— 身份证号码识别案例
  • 如何使用正则表达式替换字符串中的特定位置数字
  • 【SQL】在SQL中,行转列
  • 95. UE5 GAS RPG 实现创建多段飞弹攻击敌人
  • 分布式集群下如何做到唯一序列号
  • 在 Vue 2 中使用 Axios 发起 POST 和 GET 请求
  • Linux内核初始化过程中加载TCP/IP协议栈
  • Mysql树形结构表-查询所有子集数据
  • Vue 3 Composition API进阶指南
  • C++学习,多继承
  • 苹果研究人员提出了一种新颖的AI算法来优化字节级表示以自动语音识别(ASR),并将其与UTF-8表示进行比较
  • 2024年重磅报告!国内AI大模型产业飞速发展!
  • Sentinel 安装
  • 大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别
  • 04 奇偶分家
  • 普通人秒变AI专家:李沐创业同款RAG微调实战,打造专属外卖评论大模型
  • 微模块冷通道动环监控:智能化数据中心管理利器@卓振思众
  • 【Linux】进程调度与切换
  • SAM 2:分割图像和视频中的任何内容