欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入探究SpringBoot攔截器的自定義設(shè)計(jì)與實(shí)現(xiàn)全攻略

 更新時(shí)間:2024年05月16日 10:03:33   作者:從零開始的-CodeNinja之路  
攔截器是Spring框架提供的核心功能之?,主要用來攔截用戶的請(qǐng)求,在指定方法前后,根據(jù)業(yè)務(wù)需要執(zhí)行預(yù)先設(shè)定的代碼,本文將給大家和大家一起深入探究SpringBoot攔截器的自定義設(shè)計(jì)與實(shí)現(xiàn),需要的朋友可以參考下

一. 什么是攔截器?

  • 需要修改每個(gè)接口的處理邏輯
  • 需要修改每個(gè)接口的返回結(jié)果
  • 接口定義修改,前端代碼也需要跟著修改

有沒有更簡(jiǎn)單的辦法,統(tǒng)?攔截所有的請(qǐng)求,并進(jìn)行Session校驗(yàn)?zāi)?這里我們學(xué)習(xí)?種新的解決辦法:攔截器

攔截器是Spring框架提供的核心功能之?,主要用來攔截用戶的請(qǐng)求,在指定方法前后,根據(jù)業(yè)務(wù)需要執(zhí)行預(yù)先設(shè)定的代碼.也就是說,允許開發(fā)?員提前預(yù)定義?些邏輯,在用戶的請(qǐng)求響應(yīng)前后執(zhí)行.也可以在用戶請(qǐng)求前阻止其執(zhí)行.

在攔截器當(dāng)中,開發(fā)?員可以在應(yīng)用程序中做?些通用性的操作,比如通過攔截器來攔截前端發(fā)來的
請(qǐng)求,判斷Session中是否有登錄用戶的信息.如果有就可以放行,如果沒有就進(jìn)行攔截.

在這里插入圖片描述

二. 攔截器執(zhí)行流程

正常的調(diào)用順序:

在這里插入圖片描述

有了攔截器之后,會(huì)在調(diào)用Controller之前進(jìn)行相應(yīng)的業(yè)務(wù)處理,執(zhí)行的流程如下圖

在這里插入圖片描述

  • 添加攔截器后,執(zhí)行Controller的方法之前,請(qǐng)求會(huì)先被攔截器攔截住.執(zhí)行 preHandle() 方法,這個(gè)方法需要返回?個(gè)布爾類型的值.如果返回true,就表示放行本次操作,繼續(xù)訪問controller中的方法.如果返回false,則不會(huì)放行(controller中的方法也不會(huì)執(zhí)行).
  • controller當(dāng)中的方法執(zhí)行完畢后,再回過來執(zhí)行 postHandle() 這個(gè)方法以及afterCompletion() 方法,執(zhí)行完畢之后,最終給瀏覽器響應(yīng)數(shù)據(jù).

三. 攔截器

攔截器的基本使用.

攔截器的使用步驟分為兩步:

  • 定義攔截器
  • 注冊(cè)配置攔截器
  • 攔截器的攔截路徑配置

3.1 定義攔截器

自定義攔截器:實(shí)現(xiàn)HandlerInterceptor接口,并重寫其所有方法

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {

	@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception {
	log.info("LoginInterceptor 目標(biāo)方法執(zhí)行前執(zhí)行..");
	return true;
	}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndView modelAndView) throws Exception {
	log.info("LoginInterceptor 目標(biāo)方法執(zhí)行后執(zhí)行");
	}

@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception {
	log.info("LoginInterceptor 視圖渲染完畢后執(zhí)行,最后執(zhí)行");
	}
}
  • preHandle()方法:目標(biāo)方法執(zhí)行前執(zhí)行.返回true:繼續(xù)執(zhí)行后續(xù)操作;返回false:中斷后續(xù)操作.
  • postHandle()方法:目標(biāo)方法執(zhí)行后執(zhí)行
  • afterCompletion()方法:視圖渲染完畢后執(zhí)行,最后執(zhí)行(后端開發(fā)現(xiàn)在?乎不涉及視圖,暫不了 解)

3.2 注冊(cè)配置攔截器

注冊(cè)配置攔截器:實(shí)現(xiàn)WebMvcConfigurer接口,并重寫addInterceptors方法

@Configuration
public class WebConfig implements WebMvcConfigurer {

//?定義的攔截器對(duì)象
@Autowired
private LoginInterceptor loginInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
	//注冊(cè)?定義攔截器對(duì)象
	registry.addInterceptor(loginInterceptor).addPathPatterns("/**");//設(shè)置攔截器攔截的請(qǐng)求路徑( /** 表示攔截所有請(qǐng)求)
	}
}

啟動(dòng)服務(wù),試試訪問任意請(qǐng)求,觀察后端日志

在這里插入圖片描述

可以看到preHandle方法執(zhí)行之后就放行了,開始執(zhí)行目標(biāo)方法,目標(biāo)方法執(zhí)行完成之后執(zhí)行postHandle和afterCompletion方法.

我們把攔截器中preHandle方法的返回值改為false,再觀察運(yùn)行結(jié)果

在這里插入圖片描述

可以看到,攔截器攔截了請(qǐng)求,沒有進(jìn)行響應(yīng).

3.3 攔截路徑的配置

攔截路徑是指我們定義的這個(gè)攔截器,對(duì)哪些請(qǐng)求生效.

我們?cè)谧?cè)配置攔截器的時(shí)候,通過 addPathPatterns() 方法指定要攔截哪些請(qǐng)求.也可以通過excludePathPatterns() 指定不攔截哪些請(qǐng)求.

上述代碼中,我們配置的是 /** ,表示攔截所有的請(qǐng)求.

比如用戶登錄校驗(yàn),我們希望可以對(duì)除了登錄之外所有的路徑生效

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
	//?定義的攔截器對(duì)象
	@Autowired
	private LoginInterceptor loginInterceptor;
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
	//注冊(cè)?定義攔截器對(duì)象
	registry.addInterceptor(loginInterceptor)
		.addPathPatterns("/**")
		.excludePathPatterns("/user/login");//設(shè)置攔截器攔截的請(qǐng)求路徑
	(/** 表示攔截所有請(qǐng)求)
	}
}

在攔截器中除了可以設(shè)置 /** 攔截所有資源外,還有?些常見攔截路徑設(shè)置:

攔截路徑含義舉例
/*?級(jí)路徑能匹配/user,/book,/login,不能匹配/user/login
/**任意級(jí)路徑能匹配/user,/user/login,/user/reg
/book/*/book下的?級(jí)路徑能匹配/book/addBook,不能匹配/book/addBook/1,/book
/book/**/book下的任意級(jí)路徑能匹配/book,/book/addBook,/book/addBook/2,不能匹配/user/login

以上攔截規(guī)則可以攔截此項(xiàng)目中的使用URL,包括靜態(tài)文件(圖片文件,JS和CSS等文件).

以上就是深入探究SpringBoot攔截器的自定義設(shè)計(jì)與實(shí)現(xiàn)全攻略的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot攔截器設(shè)計(jì)與實(shí)現(xiàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java時(shí)間戳轉(zhuǎn)換為日期格式的多種方式

    java時(shí)間戳轉(zhuǎn)換為日期格式的多種方式

    本文介紹了五種將Java時(shí)間戳轉(zhuǎn)換為日期格式的方法,包括使用Date類、LocalDateTime類、Instant類、DateUtils類以及自定義時(shí)區(qū),每種方法都有其適用場(chǎng)景,可以根據(jù)具體需求選擇合適的方法,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • MyBatisPlus深入探究映射匹配的兼容性

    MyBatisPlus深入探究映射匹配的兼容性

    在最近的工作中,碰到一個(gè)比較復(fù)雜的返回結(jié)果,發(fā)現(xiàn)簡(jiǎn)單映射已經(jīng)解決不了這個(gè)問題了,只好去求助百度,學(xué)習(xí)mybatis映射匹配應(yīng)該怎么寫,將學(xué)習(xí)筆記結(jié)合工作碰到的問題寫下本文,供自身查漏補(bǔ)缺,同時(shí)已被不時(shí)之需
    2022-08-08
  • SpringBoot對(duì)接AWS?S3實(shí)現(xiàn)上傳和查詢

    SpringBoot對(duì)接AWS?S3實(shí)現(xiàn)上傳和查詢

    AWS?S3是亞馬遜提供的一種對(duì)象存儲(chǔ)服務(wù),旨在提供可擴(kuò)展、高可用性和安全的數(shù)據(jù)存儲(chǔ)解決方案,本文我們就來看看SpringBoot如何對(duì)接AWS?S3實(shí)現(xiàn)上傳和查詢吧
    2025-02-02
  • SpringBoot的配置文件(properties與yml)使用方法

    SpringBoot的配置文件(properties與yml)使用方法

    配置文件中的配置類型有兩類,一類是系統(tǒng)配置項(xiàng),這種配置的格式都是固定的,是給系統(tǒng)使用的,另一種是用戶自定義配置,用戶可以隨意地規(guī)定配置項(xiàng)的格式,又用戶自行去設(shè)置和讀取,這篇文章主要介紹了SpringBoot的配置文件(properties與yml)使用方法,需要的朋友可以參考下
    2023-08-08
  • Java類加載的過程詳解

    Java類加載的過程詳解

    這篇文章主要介紹了深入理解Java 類加載全過程的相關(guān)資料,小編覺得寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 深入理解SpringMVC中央調(diào)度器DispatcherServlet

    深入理解SpringMVC中央調(diào)度器DispatcherServlet

    這篇文章主要介紹了SpringMVC核心之中央調(diào)度器DispatcherServlet的相關(guān)知識(shí),包括SpringMVC請(qǐng)求處理過程及SrpingMVC容器和spring?IOC容器關(guān)系,需要的朋友可以參考下
    2022-05-05
  • jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼

    jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼

    這篇文章主要介紹了jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之二手書商城系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之二手書商城系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開發(fā)的二手書商城系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有在線書城該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • 詳解Java如何進(jìn)行Base64的編碼(Encode)與解碼(Decode)

    詳解Java如何進(jìn)行Base64的編碼(Encode)與解碼(Decode)

    這篇文章主要介紹了詳解Java如何進(jìn)行Base64的編碼(Encode)與解碼(Decode),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書管理系統(tǒng)

    Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09

最新評(píng)論