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

Spring?Boot攔截器和監(jiān)聽器實(shí)現(xiàn)對請求和響應(yīng)處理實(shí)戰(zhàn)

 更新時(shí)間:2023年06月25日 10:13:41   作者:劉鳳貴  
這篇文章主要介紹了Spring?Boot攔截器和監(jiān)聽器實(shí)現(xiàn)對請求和響應(yīng)處理實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

當(dāng)使用Spring Boot時(shí),我們可以通過攔截器(Interceptor)和監(jiān)聽器(Listener)來實(shí)現(xiàn)對請求和響應(yīng)的處理。攔截器和監(jiān)聽器提供了一種可插拔的機(jī)制,用于在請求處理過程中進(jìn)行自定義操作,例如記錄日志、身份驗(yàn)證、權(quán)限檢查等。下面通過提供一個(gè)示例,展示如何使用攔截器和監(jiān)聽器來記錄請求日志。

首先,我們創(chuàng)建一個(gè)簡單的Spring Boot項(xiàng)目,并添加所需的依賴。在這個(gè)示例中,我們將使用Spring Boot Starter Web。

創(chuàng)建一個(gè)Spring Boot項(xiàng)目并添加依賴

創(chuàng)建一個(gè)新的Spring Boot項(xiàng)目,可以使用Spring Initializr(https://start.spring.io/)進(jìn)行初始化。

在"Dependencies"中添加"Spring Web"依賴,并生成項(xiàng)目。

創(chuàng)建攔截器

在項(xiàng)目中創(chuàng)建一個(gè)名為 RequestLoggingInterceptor 的類,實(shí)現(xiàn) HandlerInterceptor 接口。這個(gè)攔截器將記錄請求的URL、HTTP方法和時(shí)間戳。

import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestLoggingInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 記錄請求的URL、HTTP方法和時(shí)間戳
        System.out.println("RequestLoggingInterceptor"+"啟動(dòng)了");
        System.out.println("Request URL: " + request.getRequestURL());
        System.out.println("HTTP Method: " + request.getMethod());
        System.out.println("Timestamp: " + System.currentTimeMillis());
        return true;
    }
}

注冊攔截器

在Spring Boot應(yīng)用程序的配置類中,注冊攔截器,使其生效。

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 {
    private final RequestLoggingInterceptor requestLoggingInterceptor;
    @Autowired
    public WebConfig(RequestLoggingInterceptor requestLoggingInterceptor) {
        this.requestLoggingInterceptor = requestLoggingInterceptor;
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊攔截器
        registry.addInterceptor(requestLoggingInterceptor);
    }
}

創(chuàng)建監(jiān)聽器

在項(xiàng)目中創(chuàng)建一個(gè)名為 RequestListener 的類,實(shí)現(xiàn) ServletRequestListener 接口。這個(gè)監(jiān)聽器將在請求的開始和結(jié)束時(shí)記錄日志。

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
@WebListener
public class RequestListener implements ServletRequestListener {
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        System.out.println("RequestListener"+"啟動(dòng)了");
        // 記錄請求的URL、HTTP方法和時(shí)間戳
        System.out.println("Request URL: " + request.getRequestURL());
        System.out.println("HTTP Method: " + request.getMethod());
        System.out.println("Timestamp: " + System.currentTimeMillis());
    }
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        // 請求處理完成后的操作
        System.out.println("Request processing completed.");
    }
}

編寫控制器

創(chuàng)建一個(gè)簡單的控制器來模擬請求處理

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @GetMapping("/user")
    public String getUser() {
        return "Get User";
    }
    @PostMapping("/user")
    public String saveUser(@RequestBody String user) {
        return "Save User: " + user;
    }
}
  • 在啟動(dòng)類或配置類上添加 @ServletComponentScan 注解

啟用對監(jiān)聽器的支持

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan
public class HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

運(yùn)行應(yīng)用程序

現(xiàn)在,你可以運(yùn)行Spring Boot應(yīng)用程序并訪問一些URL,觀察控制臺輸出的日志信息。每次發(fā)起請求時(shí),攔截器和監(jiān)聽器都會(huì)捕獲請求并輸出相關(guān)的日志。示例效果如下:

以上就是Spring Boot攔截器和監(jiān)聽器應(yīng)用實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Spring Boot攔截器監(jiān)聽器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java?freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件

    java?freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件

    這篇文章主要為大家詳細(xì)介紹了java如何通過freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 一文快速了解spring?boot中的@idempotent注解

    一文快速了解spring?boot中的@idempotent注解

    idempotence注解是RESTful API設(shè)計(jì)中一個(gè)重要的概念,它可以保證操作的可靠性和一致性,下面這篇文章主要給大家介紹了關(guān)于spring?boot中@idempotent注解的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • SpringMVC+MyBatis 事務(wù)管理(實(shí)例)

    SpringMVC+MyBatis 事務(wù)管理(實(shí)例)

    本文先分析編程式注解事務(wù)和基于注解的聲明式事務(wù)。對SpringMVC+MyBatis 事務(wù)管理的相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2017-08-08
  • MyBatis參數(shù)綁定中參數(shù)名不一致導(dǎo)致的錯(cuò)誤問題解決方法

    MyBatis參數(shù)綁定中參數(shù)名不一致導(dǎo)致的錯(cuò)誤問題解決方法

    作為一名Java開發(fā)者,我在實(shí)際項(xiàng)目中曾多次遇到MyBatis參數(shù)綁定的問題,其中最常見的一種情況是MyBatis參數(shù)綁定中參數(shù)名不一致導(dǎo)致的錯(cuò)誤,這類問題看似簡單,但若不深入理解MyBatis的參數(shù)綁定機(jī)制,極易陷入誤區(qū),本文將帶大家一起探討解決方案,需要的朋友可以參考下
    2025-06-06
  • NoHttpResponseException問題排查解決記錄分析

    NoHttpResponseException問題排查解決記錄分析

    這篇文章主要為大家介紹了NoHttpResponseException問題排查解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring Batch 入門示例

    Spring Batch 入門示例

    本文將向您展示如何使用Spring Boot創(chuàng)建一個(gè)的Spring Batch的Hello World示例。對和我一樣入門的有一定的幫助,感興趣的小伙伴們可以參考一下
    2021-06-06
  • java中 String和StringBuffer的區(qū)別實(shí)例詳解

    java中 String和StringBuffer的區(qū)別實(shí)例詳解

    這篇文章主要介紹了java中 String和StringBuffer的區(qū)別實(shí)例詳解的相關(guān)資料,一個(gè)小的例子,來測試String和StringBuffer在時(shí)間和空間使用上的差別,需要的朋友可以參考下
    2017-04-04
  • Java的Atomic原子類詳解

    Java的Atomic原子類詳解

    這篇文章主要介紹了Java的Atomic原子類詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題及解決方案

    MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題及解決方案

    windows系統(tǒng)打開README.md文件,每次都需要右鍵選擇notepad打開,感覺很麻煩,然后就把README.md文件打開方式默認(rèn)選擇了notepad,這樣每次雙擊就能打開,感覺很方便,這篇文章主要介紹了MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題,需要的朋友可以參考下
    2024-03-03

最新評論

临潭县| 准格尔旗| 大竹县| 资兴市| 德令哈市| 黄山市| 炎陵县| 南皮县| 永春县| 科技| 惠来县| 张家川| 平顶山市| 乡城县| 昭平县| 新河县| 佛山市| 罗江县| 静安区| 漯河市| 潞城市| 抚顺市| 边坝县| 博乐市| 江油市| 广宗县| 延川县| 迁西县| 武功县| 华亭县| 盐源县| 芮城县| 鄂托克旗| 康定县| 淮南市| 丹江口市| 灯塔市| 岑溪市| 奎屯市| 曲周县| 罗田县|