abstractinterceptor怎樣攔截請(qǐng)求

小樊
81
2024-10-23 13:52:22

AbstractInterceptor 是 Spring AOP(面向切面編程)中的一個(gè)核心接口,用于定義攔截器的基本行為。要攔截請(qǐng)求,你需要實(shí)現(xiàn)這個(gè)接口并重寫(xiě)其中的方法。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用 AbstractInterceptor 攔截請(qǐng)求:

  1. 首先,創(chuàng)建一個(gè)類實(shí)現(xiàn) AbstractInterceptor 接口:
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在請(qǐng)求處理之前執(zhí)行,返回 true 則繼續(xù)處理,返回 false 則中斷請(qǐng)求
        System.out.println("preHandle: 請(qǐng)求攔截成功");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 請(qǐng)求處理之后執(zhí)行,但在視圖渲染之前
        System.out.println("postHandle: 請(qǐng)求處理之后,視圖渲染之前");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 視圖渲染之后執(zhí)行,通常用于資源清理操作
        System.out.println("afterCompletion: 請(qǐng)求處理完成");
    }
}
  1. 接下來(lái),需要將自定義的攔截器注冊(cè)到 Spring MVC 中。創(chuàng)建一個(gè)配置類,繼承 WebMvcConfigurer 接口,并重寫(xiě) addInterceptors 方法:
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 WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊(cè)攔截器,并指定攔截路徑
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**"); // 攔截所有請(qǐng)求
    }
}

現(xiàn)在,每當(dāng)有請(qǐng)求進(jìn)入 Spring MVC 應(yīng)用時(shí),MyInterceptor 中的 preHandle 方法會(huì)被執(zhí)行,從而實(shí)現(xiàn)請(qǐng)求攔截。你可以根據(jù)實(shí)際需求修改 preHandlepostHandleafterCompletion 方法中的邏輯。

0