【本人禿頂程序員】SpringBoot從零單排——攔截器的使用

←←←←←←←←←←←← 快!點關注java

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

代碼以下:web

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,意味着在將來版本中可能會取消。代碼以下spring

/**  
 \* 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());  
         */  
    }  
}

添加一個Controllerapp

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

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

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請求已發出  
請求完成後的操做...  
視圖渲染以後...

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

## 寫在最後:
禿頂程序員的不易,看到這裏,點了關注吧!
點關注,不迷路,持續更新!!!
spa

相關文章
相關標籤/搜索