目录
SpringbootListenerApplication启动类
在开发SpringBoot项目时,开发人员经常需要对HTTP请求进行拦截和处理,以实现诸如身份验证、授权、日志记录等功能。为了实现这些功能,Spring Boot提供了过滤器和拦截器这两个工具。此外,开发人员还需要使用SpringBoot中的监听器监听SpringBoot项目中的特定事件,以实现统计网站访问量、记录用户访问路径、系统启动时加载初始化信息等功能。
- 监听器用于监听并处理指定的事件
- 监听器不需要像过滤器和拦截器那样需要配置,自定义的监听器类只需要实现特定的监听接口(有8个,比如ServletRequestListener)并用@Component注解予以标注即可生效
- 项目相比过滤器和拦截器,少了配置类
- 开发一个面向公网的网站,必须能够记录每一个请求的来源和行为。服务器可以通过监听器在请求刚一创建时记录请求的特征,即请求的IP,session id和请求访问的URL地址等信息
新建一个SpringBoot项目

项目结构:

- package com.study.springboot_listener.listener;
-
- import org.springframework.stereotype.Component;
-
- import javax.servlet.ServletRequestEvent;
- import javax.servlet.ServletRequestListener;
- import javax.servlet.http.HttpServletRequest;
-
- /**
- * 自定义监听器:
- * 用于监听每一个前端请求的URL,IP和session id
- */
- @Component //标注该类,保证SpringBoot能扫描到此监听器,即该注解让该监听器生效
- public class MyRequestListener implements ServletRequestListener {
-
- //请求初始化时触发
- public void requestInitialized(ServletRequestEvent sre){
- HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
- String ip=request.getRemoteAddr();
- String url=request.getRequestURL().toString();
- String sessionID=request.getSession().getId();//由服务器随机生成
-
- System.out.println("前端请求的IP地址为: "+ip);
- System.out.println("前端请求的URL地址为: "+url);
- System.out.println("前端请求的session id地址为: "+sessionID);
-
- }
-
- //请求被销毁时触发
- public void requestDestroyed(ServletRequestEvent sre){
- HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
- String sessionID=request.getSession().getId();
- System.out.println("session id为: "+sessionID+"的请求已被销毁");
- }
- }
- package com.study.springboot_listener.controller;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class WelcomController {
-
- @RequestMapping("/listenerIndex")
- public String index(){
- return "欢迎访问XXX网站";
- }
- }
- package com.study.springboot_listener;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
-
- @SpringBootApplication
- public class SpringbootListenerApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(SpringbootListenerApplication.class, args);
- }
-
- }
启动项目,访问网址:http://127.0.0.1:8080/listenerIndex

