SpringBoot從零單排 ------ 攔截器的使用

 

在項目開發中咱們經常須要對請求進行驗證,如登陸校驗、權限驗證、防止重複提交等等,經過攔截器來過濾請求。自定義一個攔截器須要實現HandlerInterceptor接口。
代碼以下:前端

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 自定義攔截器,如身份驗證、權限控制、登陸攔截等、
 * 一、實現HandlerInterceptor
 * 二、實現Spring的WebRequestInterceptor
 */
public class HttpInterceptor implements HandlerInterceptor {
    /**
     * 請求執行以前進行調用,對請求進行預處理,
     * 返回true以後可繼續往下執行調用下一個Interceptor。或者Controller
     * ,返回false終止請求
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("請求前攔截");
        return true;
    }
    
    /**
     * 執行完Controller以後 && DispatcherServlet進行視圖渲染以前執行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("請求完成後的操做...");
    }

    /**
     * DispatcherServlet渲染以後取執行。能夠用於資源清理等工做
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("視圖渲染以後...");
    }
}

 

此時咱們還須要建立一個類來實現WebMvcConfigurer,並重寫addInterceptors方法。將前面定義的攔截器添加到InterceptorRegistry中。
除此以外咱們還能夠繼承WebMvcConfigurerAdapter 或者繼承WebMvcConfigurationSupport。可是WebMvcConfigurerAdapter在2.0版本被標記了@Deprecated,意味着在將來版本中可能會取消。代碼以下java

/**
 * WebMvcConfigurerAdapter 自定義攔截器集成WebMvcConfigurerAdapter,SpringBoot 2.0 後,該類被標記爲@Deprecated.後的版本中會被取消
 * 解決辦法
 * 一、實現WebMvcConfigurer (推薦)
 * 二、繼承WebMvcConfigurationSupport
 */
// 該註解表示將類交給spring進行管理
@Configuration
public class WebAppConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 能夠添加多個攔截器
         */
        registry.addInterceptor(new HttpInterceptor()).addPathPatterns("/**");
        /**
         * 也能夠添加多個攔截器
         * registry.addInterceptor(new HttpInterceptor1());
         */
    }
}

添加一個Controller程序員

 /**
     * RequestMapping 將Http請求映射到方法上
     */
    @RequestMapping("/")
    public String HelloWorld() {
        System.out.println("Http請求已發出");
        return "Hello World";
    }

 

啓動項目,訪問localhost:8080.觀察控制檯,發現以下所示web

2019-01-06 00:32:32.168  INFO 69288 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-01-06 00:32:32.168  INFO 69288 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-01-06 00:32:32.173  INFO 69288 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms
請求前攔截
Http請求已發出
請求完成後的操做...
視圖渲染以後...

意味着咱們自定義的攔截器成功生效了。spring


 

歡迎關注個人公衆號:程序員共成長 數據庫

 公衆號內回覆【禮包】,獲取程序員專屬資料,包括但不限於Java、Python、Linux、數據庫、大數據、架構、測試、前端、ui以及各方向電子書架構

相關文章
相關標籤/搜索