当前位置:   article > 正文

spring boot 拦截器例子_springboot3 handlerinterceptor

springboot3 handlerinterceptor

在Spring Boot中,拦截器是通过实现`HandlerInterceptor`接口来实现的。它允许你在请求到达控制器方法之前和之后执行自定义的逻辑。下面我将为你提供一个简单的Spring Boot拦截器的例子。

假设我们有一个简单的控制器类`UserController`,其中有两个请求处理方法:`getUser`和`saveUser`,我们希望在每次请求这两个方法前后记录日志。

1. 创建一个拦截器类 `LoggingInterceptor` 实现 `HandlerInterceptor` 接口:

  1. import javax.servlet.http.HttpServletRequest;
  2. import javax.servlet.http.HttpServletResponse;
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5. public class LoggingInterceptor implements HandlerInterceptor {
  6.     @Override
  7.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  8.         System.out.println("Before handling request. URL: " + request.getRequestURL());
  9.         return true; // Returning true allows the request to continue to the controller method. Returning false will stop the request.
  10.     }
  11.     @Override
  12.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  13.         System.out.println("After handling request. URL: " + request.getRequestURL());
  14.     }
  15.     @Override
  16.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  17.         // This method is called after the view rendering is complete.
  18.         // It can be used for resource cleanup tasks.
  19.     }
  20. }

2. 在Spring Boot中注册拦截器,创建一个配置类`InterceptorConfig`:

  1. import org.springframework.context.annotation.Configuration;
  2. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  3. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  4. @Configuration
  5. public class InterceptorConfig implements WebMvcConfigurer {
  6.     @Override
  7.     public void addInterceptors(InterceptorRegistry registry) {
  8.         registry.addInterceptor(new LoggingInterceptor());
  9.     }
  10. }

3. 创建一个简单的`UserController`:

  1. import org.springframework.web.bind.annotation.GetMapping;
  2. import org.springframework.web.bind.annotation.PostMapping;
  3. import org.springframework.web.bind.annotation.RequestParam;
  4. import org.springframework.web.bind.annotation.RestController;
  5. @RestController
  6. public class UserController {
  7.     @GetMapping("/user")
  8.     public String getUser(@RequestParam("id") String userId) {
  9.         System.out.println("Getting user: " + userId);
  10.         return "User: " + userId;
  11.     }
  12.     @PostMapping("/user")
  13.     public String saveUser(@RequestParam("name") String username) {
  14.         System.out.println("Saving user: " + username);
  15.         return "Saved user: " + username;
  16.     }
  17. }

4. 运行Spring Boot应用,然后通过浏览器或者API请求测试:

当访问`http://localhost:8080/user?id=123`时,控制台输出:


Before handling request. URL: http://localhost:8080/user?id=123
Getting user: 123
After handling request. URL: http://localhost:8080/user?id=123
 

当通过POST请求`http://localhost:8080/user`,参数为`name=John Doe`时,控制台输出:


Before handling request. URL: http://localhost:8080/user
Saving user: John Doe
After handling request. URL: http://localhost:8080/user
 

以上就是一个简单的Spring Boot拦截器的例子,它会在请求到达控制器方法前后记录日志。实际应用中,你可以根据需要在拦截器中添加更多的逻辑,比如权限验证、异常处理等。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号