最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC攔截器(Interceptor)的定義和配置過程

 更新時間:2025年03月25日 09:29:44   作者:庫隱  
這篇文章主要介紹了Spring MVC攔截器(Interceptor)的定義和配置過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、SpringMVC中組件: 攔截器(Interceptor)

攔截器(Interceptor)

對我們來說是非常實用的,也是經(jīng)常使用的,可以在所有的HandlerMapping的前后進行攔截,當我們需要將特定功能應用于符合某種規(guī)則的請求的時候,這個時候就可以使用攔截器。

我們自定義的攔截器必須繼承org.springframework.web.servlet.HandlerInterceptor,在HandlerInterceptor由三個默認方法

package org.springframework.web.servlet;

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

import org.springframework.lang.Nullable;
import org.springframework.web.method.HandlerMethod;

public interface HandlerInterceptor {
	/**
	* 在執(zhí)行實際儲器程序之前,根據(jù)返回的boolen判斷是否放行
	*/
	default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {

		return true;
	}
	/**
	* 執(zhí)行處理程序之后
	*/
	default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
	}
	/**
	* 在完成請求后
	*/
	default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
	}

}

自定義的攔截器

package com.example.web.interceptor;

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

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

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURI = request.getRequestURI();
        System.out.println("請求的路徑:" +requestURI);
        long startTime = System.currentTimeMillis();
        request.setAttribute("request::start",startTime);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        long startTime = (long)request.getAttribute("request::start");
        long processEndTime = System.currentTimeMillis();
        System.out.println("處理程序執(zhí)行完成耗時:"+ (processEndTime-startTime) + "毫秒");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        long startTime = (long)request.getAttribute("request::start");
        long endTime = System.currentTimeMillis();
        System.out.println("從請求到完成響應耗時:"+ (endTime-startTime) + "毫秒");
    }
}

2、攔截器(Interceptor)的配置

在自定攔截器完成后,就是在Spring MVC 中配置我們的攔截器(Interceptor)了,可以通過Java配置類的方式進行配置,也可以通過xml文件的方式進行配置。

先從Java配置類的方式來看

  • @EnableWebMvc : 表示啟用Spring MVC的功能
  • @Configuration: 表示該類是Spring 中的配置類
  • 攔截的配置需要重寫WebMvcConfigureraddInterceptors(InterceptorRegistry registry) 方法,通過registry進行添加(默認攔截所有)
  • 可以通過addPathPatterns來表示攔截哪些請求
  • 可以通過excludePathPatterns不攔截哪些請求

對于URI匹配模式:

  • ?:匹配一個字符
  • * :匹配路徑段中的零個或者多個字符
  • **:匹配零個或者多個路徑段
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	registry.addInterceptor(new MyInterceptor())
        registry.addInterceptor(new LocaleChangeInterceptor());
        registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
    }
}

在xml中進行配置

<mvc:interceptors>
	<bean class="com.example.web.interceptor.MyInterceptor"/>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/admin/**"/>
        <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/>
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/secure/*"/>
        <bean class="org.example.SecurityInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java實現(xiàn)對視頻進行截圖的方法【附ffmpeg下載】

    Java實現(xiàn)對視頻進行截圖的方法【附ffmpeg下載】

    這篇文章主要介紹了Java實現(xiàn)對視頻進行截圖的方法,結(jié)合實例形式分析了Java使用ffmpeg針對視頻進行截圖的相關操作技巧,并附帶ffmpeg.exe文件供讀者下載使用,需要的朋友可以參考下
    2018-01-01
  • Java使用Apache POI庫讀取Excel表格文檔的示例

    Java使用Apache POI庫讀取Excel表格文檔的示例

    POI庫是Apache提供的用于在Windows下讀寫各類微軟Office文檔的Java庫,這里我們就來看一下Java使用Apache POI庫讀取Excel表格文檔的示例:
    2016-06-06
  • Spring Boot 表單驗證篇

    Spring Boot 表單驗證篇

    在表單提交的時候,我們需要進行驗證。下面通過本篇文章給大家介紹Spring Boot 表單驗證篇,需要的朋友可以參考下
    2017-08-08
  • SpringCloud Ribbon負載均衡代碼實例

    SpringCloud Ribbon負載均衡代碼實例

    這篇文章主要介紹了SpringCloud Ribbon負載均衡代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java?關鍵字break和continue的使用說明

    Java?關鍵字break和continue的使用說明

    這篇文章主要介紹了Java?關鍵字break和continue的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot的jar包如何啟動的實現(xiàn)

    SpringBoot的jar包如何啟動的實現(xiàn)

    本文主要介紹了SpringBoot的jar包如何啟動的實現(xiàn),文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java基礎之數(shù)組模擬循環(huán)隊列

    Java基礎之數(shù)組模擬循環(huán)隊列

    這篇文章主要介紹了Java基礎之數(shù)組模擬循環(huán)隊列,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們也有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 基于java語言實現(xiàn)快遞系統(tǒng)

    基于java語言實現(xiàn)快遞系統(tǒng)

    這篇文章主要為大家詳細介紹了基于java語言實現(xiàn)快遞系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • IDEA不能自動導包的問題及解決方案

    IDEA不能自動導包的問題及解決方案

    這篇文章主要介紹了IDEA不能自動導包的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • SpringBoot中靜態(tài)訪問配置屬性的解決方案對比

    SpringBoot中靜態(tài)訪問配置屬性的解決方案對比

    在SpringBoot開發(fā)中,靜態(tài)訪問配置信息是一個常見需求,尤其是在工具類中直接獲取配置值,下面我們就來看看幾個常用的方法,大家可以根據(jù)需要選擇
    2025-03-03

最新評論

大安市| 丹寨县| 醴陵市| 靖西县| 交口县| 太和县| 秦皇岛市| 丰镇市| 平谷区| 广南县| 青田县| 怀远县| 宾阳县| 清徐县| 九江市| 正宁县| 婺源县| 马边| 光泽县| 中西区| 民权县| 皮山县| 山东| 宁城县| 靖宇县| 丽水市| 霞浦县| 松江区| 孟津县| 扬中市| 天等县| 济阳县| 滨海县| 山阳县| 弥渡县| 义马市| 黄骅市| 大安市| 龙州县| 塔河县| 中西区|