SpringBoot自定義攔截器

前言:

在JavaEE中,經常用filter來做攔截器,後來有了SpringMvc,我們使用HandlerInterceptor進行攔截,現在有了Springboot,我們也使用HandlerInterceptor進行攔截,但我們不用xml的配置了,省去很多的事情。

依賴:

	  	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

一:理論實現

  • 實現接口HandlerInterceptor,重寫其中的三個方法
  • 實現接口WebMvcConfigurer,重寫addInterceptors方法,註冊攔截器

二:實戰

1.自定義攔截器

@Component
public class MyInterceptor implements HandlerInterceptor {
    //請求處理前,也就是訪問Controller前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String num = request.getParameter("num");
        if(num==null){
            System.out.println("被攔截器攔截了");
            return false;
        }else {
            return true;
        }
    }
    //請求已經被處理,但在視圖渲染前
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("請求處理結束了");
    }
    //請求結果結果已經渲染好了,response沒有進行返回但也無法修改reponse了(一般用於清理數據)
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }

2.配置攔截規則

@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 通過registry來註冊攔截器,通過addPathPatterns來添加攔截路徑
        registry.addInterceptor(this.myInterceptor).addPathPatterns("/**");//攔截所有請求
    }
}

3.編寫controller進行測試

@RestController
public class TestController {
    @GetMapping("hi")
    public String testController(){
        System.out.println("我正在處理請求");
        return "這是一個攔截器測試類";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章