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

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

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

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

攔截器(Interceptor)

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

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

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í)行實(shí)際儲(chǔ)器程序之前,根據(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í)行完成耗時(shí):"+ (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("從請求到完成響應(yīng)耗時(shí):"+ (endTime-startTime) + "毫秒");
    }
}

2、攔截器(Interceptor)的配置

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

先從Java配置類的方式來看

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

對于URI匹配模式:

  • ?:匹配一個(gè)字符
  • * :匹配路徑段中的零個(gè)或者多個(gè)字符
  • **:匹配零個(gè)或者多個(gè)路徑段
@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中進(jìn)行配置

<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é)

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

相關(guān)文章

  • Spring Boot 動(dòng)態(tài)數(shù)據(jù)源示例(多數(shù)據(jù)源自動(dòng)切換)

    Spring Boot 動(dòng)態(tài)數(shù)據(jù)源示例(多數(shù)據(jù)源自動(dòng)切換)

    本篇文章主要介紹了Spring Boot 動(dòng)態(tài)數(shù)據(jù)源示例(多數(shù)據(jù)源自動(dòng)切換),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 基于java文本復(fù)制的7種方式總結(jié)

    基于java文本復(fù)制的7種方式總結(jié)

    下面小編就為大家分享一篇基于java文本復(fù)制的7種方式總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Java編程構(gòu)造方法與對象的創(chuàng)建詳解

    Java編程構(gòu)造方法與對象的創(chuàng)建詳解

    這篇文章主要介紹了Java編程構(gòu)造方法與對象的創(chuàng)建詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java緩存框架之Caffeine源碼解析

    Java緩存框架之Caffeine源碼解析

    這篇文章主要介紹了Java緩存框架之Caffeine源碼解析,Caffeine?是一個(gè)基于Java?8的高性能本地緩存框架,其結(jié)構(gòu)和?Guava?Cache?基本一樣,api也一樣,基本上很容易就能替換,需要的朋友可以參考下
    2023-11-11
  • java拓展集合工具類CollectionUtils

    java拓展集合工具類CollectionUtils

    這篇文章主要為大家詳細(xì)介紹了java拓展集合工具類CollectionUtils,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 解讀Spring-Context的作用及用法

    解讀Spring-Context的作用及用法

    這篇文章主要介紹了Spring-Context的作用及用法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot多環(huán)境開發(fā)該如何配置

    SpringBoot多環(huán)境開發(fā)該如何配置

    這篇文章主要介紹了 SpringBoot多環(huán)境的開發(fā)配置詳情,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 如何將Mybatis連接到ClickHouse

    如何將Mybatis連接到ClickHouse

    這篇文章主要介紹了如何將Mybatis連接到ClickHouse,幫助大家更好得理解和學(xué)習(xí)使用Mybatis,感興趣的朋友可以了解下
    2021-03-03
  • 詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

    詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

    這篇文章主要介紹了詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案,本文分兩步,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Spring5中的WebClient使用方法詳解

    Spring5中的WebClient使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring5中WebClient使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring5具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論