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