当应用Spring Boot时,咱们能够通过拦截器(Interceptor)和监听器(Listener)来实现对申请和响应的解决。拦截器和监听器提供了一种可插拔的机制,用于在申请处理过程中进行自定义操作,例如记录日志、身份验证、权限查看等。上面通过提供一个示例,展现如何应用拦截器和监听器来记录申请日志。
首先,咱们创立一个简略的Spring Boot我的项目,并增加所需的依赖。在这个示例中,咱们将应用Spring Boot Starter Web。
- 创立一个Spring Boot我的项目并增加依赖
创立一个新的Spring Boot我的项目,能够应用Spring Initializr(https://start.spring.io/)进行初始化。在"Dependencies"中增加"Spring Web"依赖,并生成我的项目。
- 创立拦截器
在我的项目中创立一个名为 RequestLoggingInterceptor
的类,实现 HandlerInterceptor
接口。这个拦截器将记录申请的URL、HTTP办法和工夫戳。
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestLoggingInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 记录申请的URL、HTTP办法和工夫戳 System.out.println("RequestLoggingInterceptor"+"启动了"); System.out.println("Request URL: " + request.getRequestURL()); System.out.println("HTTP Method: " + request.getMethod()); System.out.println("Timestamp: " + System.currentTimeMillis()); return true; }}
- 注册拦截器
在Spring Boot应用程序的配置类中,注册拦截器,使其失效。
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class WebConfig implements WebMvcConfigurer { private final RequestLoggingInterceptor requestLoggingInterceptor; @Autowired public WebConfig(RequestLoggingInterceptor requestLoggingInterceptor) { this.requestLoggingInterceptor = requestLoggingInterceptor; } @Override public void addInterceptors(InterceptorRegistry registry) { // 注册拦截器 registry.addInterceptor(requestLoggingInterceptor); }}
- 创立监听器
在我的项目中创立一个名为 RequestListener
的类,实现 ServletRequestListener
接口。这个监听器将在申请的开始和完结时记录日志。
import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;import javax.servlet.annotation.WebListener;import javax.servlet.http.HttpServletRequest;@WebListenerpublic class RequestListener implements ServletRequestListener { @Override public void requestInitialized(ServletRequestEvent sre) { HttpServletRequest request = (HttpServletRequest) sre.getServletRequest(); System.out.println("RequestListener"+"启动了"); // 记录申请的URL、HTTP办法和工夫戳 System.out.println("Request URL: " + request.getRequestURL()); System.out.println("HTTP Method: " + request.getMethod()); System.out.println("Timestamp: " + System.currentTimeMillis()); } @Override public void requestDestroyed(ServletRequestEvent sre) { // 申请解决实现后的操作 System.out.println("Request processing completed."); }}
- 编写控制器
创立一个简略的控制器来模仿申请解决
import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class UserController { @GetMapping("/user") public String getUser() { return "Get User"; } @PostMapping("/user") public String saveUser(@RequestBody String user) { return "Save User: " + user; }}
- 在启动类或配置类上增加 @ServletComponentScan 注解
启用对监听器的反对
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication@ServletComponentScanpublic class HelloWorldApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldApplication.class, args); }}
- 运行应用程序
当初,你能够运行Spring Boot应用程序并拜访一些URL,察看控制台输入的日志信息。每次发动申请时,拦截器和监听器都会捕捉申请并输入相干的日志。示例成果如下:
本文由mdnice多平台公布