SpringBoot中的拦截器Interceptors

哥们看看码农 2024-07-29 03:32:07
Spring Boot 拦截器是一种强大的机制,用于拦截应用程序中的 HTTP 请求和响应。 它们是 Spring Web MVC 框架的一部分,允许你在控制器处理请求之前和之后执行操作。 创建拦截器要创建一个拦截器,你需要实现 HandlerInterceptor 接口或扩展 HandlerInterceptorAdapter 类。 @Slf4j@Componentpublic LoggingInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("Request URL: " + request.getRequestURL()); log.info("Request Method: " + request.getMethod()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // Can log response details here } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception { // Can log completion details here log.info("Request Process completed"); }}@Slf4j@Componentpublic ProductInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("Request URL: " + request.getRequestURL()); log.info("Request Method: " + request.getMethod()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // Can log response details here } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception { // Can log completion details here log.info("Request Process completed"); }}注册拦截器@Configurationpublic WebConfig implements WebMvcConfigurer { @Autowired private LoggingInterceptor loggingInterceptor; @Autowired private ProductInterceptor productInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loggingInterceptor) .addPathPatterns("/api/**") // Define the URL patterns to be intercepted .excludePathPatterns("/api/auth/**"); // Define the URL patterns to be excluded from interception registry.addInterceptor(productInterceptor) .addPathPatterns("/product/**") // Define the URL patterns to be intercepted .excludePathPatterns("/api/auth/**"); }}@RestController@RequestMapping("/api")@Slf4jpublic CustomerController { @GetMapping public String getMessage(){ log.info("getMessage()"); return "welcomoe to the interceptors session"; }}@RestController@RequestMapping("/product")@Slf4jpublic ProductController { @GetMapping public String getProduct(){ log.info("getProduct()"); return "product information"; }}拦截器的生命周期preHandle:在实际处理器执行之前调用。该方法可用于预处理(例如,日志记录、认证等)。如果返回 `false`,则执行链将被中断。postHandle: 在处理器执行之后但在 `ModelAndView` 渲染之前调用。该方法可用于在渲染之前修改 `ModelAndView`。afterCompletion:在整个请求完成后调用。该方法可用于清理活动。 过滤器和拦截器都是用于处理 Spring Boot 应用程序中的 HTTP 请求和响应的机制,但它们在不同的层次上运行并服务于不同的目的。以下是它们之间的主要区别: 过滤器生命周期过滤器是 Servlet API 的一部分,可以在 web.xml 文件中或通过 Spring Boot 应用程序中的注解进行配置。过滤器应用于所有传入请求,可用于任务如认证、日志记录和输入验证。执行点:过滤器在请求处理之前和之后执行,包括分派到 servlet 或控制器。范围:过滤器可以应用于所有或特定的 URL 模式。它们在请求到达 servlet 或控制器之前在最低级别工作。配置方法:过滤器使用 `@WebFilter` 注解或通过在 `FilterRegistrationBean` 中注册为 bean 进行配置。使用场景:通常用于横切关注点,如安全、日志记录和输入/输出过滤。拦截器生命周期:拦截器是 Spring MVC 框架的一部分,使用 Spring 的配置类进行配置。拦截器用于在控制器方法执行之前和之后执行操作。执行点:拦截器在请求生命周期的三个不同点执行:在控制器方法之前(preHandle),在控制器方法之后但在视图渲染之前(postHandle),以及在整个请求完成后(afterCompletion)。范围:拦截器可以应用于所有或特定的 URL 模式,并且可以按链式顺序排列。它们在更高级别工作,与处理器(控制器)和视图交互。配置方法:拦截器通过实现 HandlerInterceptor 接口并在实现 WebMvcConfigurer 的配置类中注册进行配置。应用场景:通常用于任务如日志记录、安全检查、修改 ModelAndView 对象以及需要在请求生命周期特定点发生的其他操作。更多关于Spring的内容可以关注SpringForAll社区,专注分享关于Spring的一切。
0 阅读:0

哥们看看码农

简介:感谢大家的关注