• SpringBoot——整合Servlet的三大组件:监听器(Listener)


    目录

    监听器(Listener)

    项目总结

    MyRequestListener自定义监听器

    WelcomController控制器 

    SpringbootListenerApplication启动类


    开发SpringBoot项目时,开发人员经常需要对HTTP请求进行拦截和处理,以实现诸如身份验证、授权、日志记录等功能。为了实现这些功能,Spring Boot提供了过滤器和拦截器这两个工具。此外,开发人员还需要使用SpringBoot中的监听器监听SpringBoot项目中的特定事件,以实现统计网站访问量、记录用户访问路径、系统启动时加载初始化信息等功能。

    监听器(Listener)

    • 监听器用于监听并处理指定的事件
    • 监听器不需要像过滤器和拦截器那样需要配置,自定义的监听器类只需要实现特定的监听接口(有8个,比如ServletRequestListener)并用@Component注解予以标注即可生效
    • 项目相比过滤器和拦截器,少了配置类

    项目总结

    • 开发一个面向公网的网站,必须能够记录每一个请求的来源和行为。服务器可以通过监听器在请求刚一创建时记录请求的特征,即请求的IP,session id和请求访问的URL地址等信息

    新建一个SpringBoot项目

    项目结构:

    MyRequestListener自定义监听器

    1. package com.study.springboot_listener.listener;
    2. import org.springframework.stereotype.Component;
    3. import javax.servlet.ServletRequestEvent;
    4. import javax.servlet.ServletRequestListener;
    5. import javax.servlet.http.HttpServletRequest;
    6. /**
    7. * 自定义监听器:
    8. * 用于监听每一个前端请求的URL,IP和session id
    9. */
    10. @Component //标注该类,保证SpringBoot能扫描到此监听器,即该注解让该监听器生效
    11. public class MyRequestListener implements ServletRequestListener {
    12. //请求初始化时触发
    13. public void requestInitialized(ServletRequestEvent sre){
    14. HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
    15. String ip=request.getRemoteAddr();
    16. String url=request.getRequestURL().toString();
    17. String sessionID=request.getSession().getId();//由服务器随机生成
    18. System.out.println("前端请求的IP地址为: "+ip);
    19. System.out.println("前端请求的URL地址为: "+url);
    20. System.out.println("前端请求的session id地址为: "+sessionID);
    21. }
    22. //请求被销毁时触发
    23. public void requestDestroyed(ServletRequestEvent sre){
    24. HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
    25. String sessionID=request.getSession().getId();
    26. System.out.println("session id为: "+sessionID+"的请求已被销毁");
    27. }
    28. }

    WelcomController控制器 

    1. package com.study.springboot_listener.controller;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. @RestController
    5. public class WelcomController {
    6. @RequestMapping("/listenerIndex")
    7. public String index(){
    8. return "欢迎访问XXX网站";
    9. }
    10. }

    SpringbootListenerApplication启动类

    1. package com.study.springboot_listener;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. @SpringBootApplication
    5. public class SpringbootListenerApplication {
    6. public static void main(String[] args) {
    7. SpringApplication.run(SpringbootListenerApplication.class, args);
    8. }
    9. }

    启动项目,访问网址:http://127.0.0.1:8080/listenerIndex 

  • 相关阅读:
    【NodeJs入门学习】node服务环境搭建
    UBoot初次编译
    E. Yet Another Array Counting Problem
    Django 用户认证
    Python基础入门---conda 如何管理依赖包以及复制相同环境的
    Spring Data JPA之Spring boot整合JPA进行CRUD
    方舟单机/管理员生物指令代码大全
    ​力扣解法汇总1656-设计有序流
    eclipse中springboot项目如何打包成jar文件
    C++智能指针之unique_ptr
  • 原文地址:https://blog.csdn.net/weixin_72052233/article/details/139409976