关于后端:Spring-Boot实战拦截器和监听器的应用指南

51次阅读

共计 3485 个字符,预计需要花费 9 分钟才能阅读完成。

当应用 Spring Boot 时,咱们能够通过拦截器(Interceptor)和监听器(Listener)来实现对申请和响应的解决。拦截器和监听器提供了一种可插拔的机制,用于在申请处理过程中进行自定义操作,例如记录日志、身份验证、权限查看等。上面通过提供一个示例,展现如何应用拦截器和监听器来记录申请日志。

首先,咱们创立一个简略的 Spring Boot 我的项目,并增加所需的依赖。在这个示例中,咱们将应用 Spring Boot Starter Web。

  1. 创立一个 Spring Boot 我的项目并增加依赖

创立一个新的 Spring Boot 我的项目,能够应用 Spring Initializr(https://start.spring.io/)进行初始化。在 ”Dependencies” 中增加 ”Spring Web” 依赖,并生成我的项目。

  1. 创立拦截器

在我的项目中创立一个名为 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;
    }
}
  1. 注册拦截器

在 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;

@Configuration
public 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);
    }
}
  1. 创立监听器

在我的项目中创立一个名为 RequestListener 的类,实现 ServletRequestListener 接口。这个监听器将在申请的开始和完结时记录日志。

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;

@WebListener
public 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.");
    }
}
  1. 编写控制器

创立一个简略的控制器来模仿申请解决

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;

@RestController
public class UserController {@GetMapping("/user")
    public String getUser() {return "Get User";}

    @PostMapping("/user")
    public String saveUser(@RequestBody String user) {return "Save User:" + user;}
}
  1. 在启动类或配置类上增加 @ServletComponentScan 注解

启用对监听器的反对

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class HelloWorldApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldApplication.class, args);
    }
}
  1. 运行应用程序

当初,你能够运行 Spring Boot 应用程序并拜访一些 URL,察看控制台输入的日志信息。每次发动申请时,拦截器和监听器都会捕捉申请并输入相干的日志。示例成果如下:

本文由 mdnice 多平台公布

正文完
 0