1. 程式人生 > >spring boot入門(七) springboot的攔截器Interceptor。最完整、簡單易懂、詳細的spring boot教程。

spring boot入門(七) springboot的攔截器Interceptor。最完整、簡單易懂、詳細的spring boot教程。

很多同學搞不懂攔截器和過濾器的區別,我們先說一下他們的區別:

  • 過濾器和攔截器非常相似,但是它們有很大的區別
  • 最簡單明瞭的區別就是過濾器可以修改request,而攔截器不能
  • 過濾器需要在servlet容器中實現,攔截器可以適用於javaEE,javaSE等各種環境
  • 攔截器可以呼叫IOC容器中的各種依賴,而過濾器不能
  • 過濾器只能在請求的前後使用,而攔截器可以詳細到每個方法

通俗的說過濾器就是篩選出你要的東西,比如requeset中你要的那部分
攔截器在做安全方面用的比較多,比如終止一些流程。

接下來我們舉個簡單的例子:

1、建立interceptor包,在此包下建立Interceptor類。此處我們以處理Ajax跨域請求為例,關於跨域請求,大家不懂的可以自行學習。程式碼如下:

public class Interceptor implements HandlerInterceptor {
    
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // TODO Auto-generated method stub
    }

    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        // TODO Auto-generated method stub
    }

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {

        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
        System.err.println("------------------>:已完成跨域處理");
        return true;
    }
}

注意此類實現了HandlerInterceptor介面。

2、我們還要註冊一下此攔截器才能被springboot檢測到,在config包下建立AppConfigurer類,程式碼如下:

@Configuration
public class AppConfigurer extends WebMvcConfigurerAdapter {

    @Bean
    public HandlerInterceptor getMyInterceptor() {
        return new Interceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**");
        super.addInterceptors(registry);
    }
}

注意此類繼承了WebMvcConfigurerAdapter類。getMyInterceptor方法為攔截器例項注入方法。addInterceptors方法為說明攔截目標方法。此處我們所有請求都攔截。

3、測試結果如下:

攔截器配置成功。