1. 程式人生 > 其它 >ajax如何重定向modelandview檢視_Spring Boot入門系列(十)如何使用攔截器,一學就會!...

ajax如何重定向modelandview檢視_Spring Boot入門系列(十)如何使用攔截器,一學就會!...

技術標籤:ajax如何重定向modelandview檢視

前面介紹了Spring Boot 如何整合定時任務已經Spring Boot 如何建立非同步任務,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。

接下來開始講 Spring Boot的重要功能:整合攔截器。以前我們在做mvc 專案時也使用到的是filter過濾器也就是攔截器。其實Spring Boot 中的攔截器和SpringMVC中的攔截器也是類似的,只是配置上有些區別。那麼下面我們就來看看Spring Boot 是怎麼配置攔截器的。

一、攔截器配置

建立InterceptorConfig 攔截器配置類,這個類主要是統一配置管理所有的攔截器。

package com.weiz.config;import com.weiz.controller.interceptor.TwoInterceptor;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import com.weiz.controller.interceptor.OneInterceptor;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.annotation.Resource;@Configurationpublic class InterceptorConfig implements WebMvcConfigurer {    @Resource    private OneInterceptor myInterceptor1;    @Override    public void addInterceptors(InterceptorRegistry registry) {        //新增要攔截的url                1                 攔截的路徑                                    放行的路徑        registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");    }}

說明:

1、使用註解@Configuration配置攔截器

2、繼承WebMvcConfigurer 介面

3、重寫addInterceptors方法,新增需要的攔截器地址

二、自定義攔截器

前面建立了攔截器的配置管理類,接下來就應該建立具體的攔截器。首先建立com.weiz.controller.interceptor包,並建立OneInterceptor攔截器。這個攔截器通過實現 HandlerInterceptor 介面,達到請求攔截的作用。具體程式碼如下:

package com.weiz.controller.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class OneInterceptor implements HandlerInterceptor  {    /**     * 在請求處理之前進行呼叫(Controller方法呼叫之前)     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,             Object object) throws Exception {                System.out.println("被OneInterceptor攔截,放行...");return true;    }        /**     * 請求處理之後進行呼叫,但是在檢視被渲染之前(Controller方法呼叫之後)     */    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response,             Object object, ModelAndView mv)            throws Exception {        // TODO Auto-generated method stub            }        /**     * 在整個請求結束之後被呼叫,也就是在DispatcherServlet 渲染了對應的檢視之後執行     * (主要是用於進行資源清理工作)     */    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,             Object object, Exception ex)            throws Exception {        // TODO Auto-generated method stub            }}

說明:

1、HandlerInterceptor介面有 3 個攔截方法:

preHandle:Controller邏輯執行之前進行攔截

postHandle:Controller邏輯執行完畢但是檢視解析器還未進行解析之前進行攔截

afterCompletion:Controller邏輯和檢視解析器執行完畢進行攔截

2、實際開發中 一般preHandle 使用頻率比較高,postHandle 和 afterCompletion操作相對比較少。

postHandle 是在檢視解析前進行攔截,通過 Model 再次新增資料到 Request域中。

afterCompletion 暫時沒有想到使用場景,如果有使用過的場景可以在下面評論區中進行評論。

測試

在瀏覽器中,輸入配置管理器中攔截的地址:http://localhost:8088/th/index

0f5beca0dd9d3830d398e4579a6ab961.png

從上圖可以看出定義的攔截器生效了,打印出了攔截器裡面的log 。

最後

以上,就把Spring Boot 如何使用攔截器介紹完了,是不是特別簡單。SpringBoot 2 整合攔截器和整合 Filter的操作很像,都是通過一個註冊類將其注入到Spring的上下文中,只不過Filter使用的是 FilterRegistrationBean 而攔截器使用的是 InterceptorRegistry。

個人覺得比使用 xml 配置的方式更為簡單,如果你還沒有在 SpringBoot 專案中使用過攔截器,趕快來操作一下吧!

這個系列課程的完整原始碼,也會提供給大家。大家關注我的頭條號(章為忠學架構),獲取這個系列課程的完整原始碼。

推薦閱讀:

Spring Boot整合定時任務Task,一秒搞定定時任務

SpringBoot入門系列(四)如何整合Thymeleaf模板引擎

Spring Boot整合Redis程式碼詳解,三步搞定!

SpringBoot入門系列(三)資原始檔屬性配置

Spring Boot入門系列(六)Spring整合Mybatis詳解「附詳細步驟」