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

在SpringBoot項(xiàng)目中整合攔截器的詳細(xì)步驟

 更新時(shí)間:2022年09月07日 09:48:20   作者:散一世繁華,顛半世琉璃  
在系統(tǒng)中經(jīng)常需要在處理用戶請(qǐng)求之前和之后執(zhí)行一些行為,例如檢測(cè)用戶的權(quán)限,或者將請(qǐng)求的信息記錄到日志中,即平時(shí)所說的"權(quán)限檢測(cè)"及"日志記錄",下面這篇文章主要給大家介紹了關(guān)于在SpringBoot項(xiàng)目中整合攔截器的相關(guān)資料,需要的朋友可以參考下

引言

攔截器在Web系統(tǒng)中非常常見,對(duì)于某些全局統(tǒng)一的操作,我們可以把它提取到攔截器中實(shí)現(xiàn)??偨Y(jié)起來,攔截器大致有以下幾種使用場(chǎng)景:

1.權(quán)限檢查:如登錄檢測(cè),進(jìn)入處理程序檢測(cè)用戶是否登錄,如果沒有,則直接返回登錄頁面或error錯(cuò)誤頁面;

2.性能檢測(cè):有時(shí)系統(tǒng)在某段時(shí)間莫名其妙很慢,我們可以通過攔截器在進(jìn)入處理程序之前記錄開始時(shí)間,在處理完后記錄結(jié)束時(shí)間,從而得到該請(qǐng)求的處理時(shí)間;

3.通用行為;讀取cookie得到用戶信息并將用戶對(duì)象放入請(qǐng)求,從而方便后序流程使用,還有提取Locale、Theme信息等,只要是多個(gè)處理程序都需要的,即可以使用功能攔截器實(shí)現(xiàn)。

下面我來詳細(xì)介紹如何在SpringBoot項(xiàng)目中搭建攔截器的步驟。

1.創(chuàng)建一個(gè)SpringBoot項(xiàng)目工程

打開IDEA,點(diǎn)擊文件,選擇新建項(xiàng)目,點(diǎn)擊Spring Initializr,然后根據(jù)自己的需求設(shè)置項(xiàng)目名稱,位置以及JDK。這里需要注意,服務(wù)器的URL最好設(shè)置為阿里云服務(wù)器,這樣可以使得項(xiàng)目加載地更快。

點(diǎn)擊下一步后 ,選擇2.4.1的SpringBoot版本 ,導(dǎo)入Spring Web依賴后點(diǎn)擊完成即可。

2.配置自定義的攔截器

在自定義的攔截器類中要繼承HandlerInterceptor,只有繼承了HandlerInterceptor 的類才算是一個(gè)攔截器,同時(shí)根據(jù)需求重寫preHandle,postHandle以及afterCompletion方法。

具體編輯的攔截器如下所示:代碼中的url請(qǐng)求將在controlelr控制器中編寫。另外需要注意的是User是一個(gè)實(shí)體類,包括id與username兩個(gè)屬性以及set,get方法,這里就不具體展示了。

package com.xing.springbootinterceptor.interceptor;

import com.xing.springbootinterceptor.model.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//自定義的攔截器 只有繼承了HandlerInterceptor 自定義的類才算是一個(gè)攔截器
public class UserInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //編寫攔截的規(guī)則
        //判斷用戶是否登錄 從session中取值
        User user=(User) request.getSession().getAttribute("user");
        if(user==null){
            //未登錄
            response.sendRedirect(request.getContextPath()+"/user/error");//重定向
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

3.注冊(cè)攔截器

編寫完自定義的攔截器后,我們還需要將自定義的攔截器注冊(cè)到Java的配置類中,方便SpringBoot項(xiàng)目啟動(dòng)的時(shí)候讀取Config配置類。

我們需要?jiǎng)?chuàng)建一個(gè)類,實(shí)現(xiàn)WebMvcConfigurer接口并在類名上使用 @Configuration注解 表明這是一個(gè)配置類,其實(shí)就類似于我們?cè)赟pringMVC中的XML配置文件,不過現(xiàn)在就用純Java代碼配置而已。

然后在該類中實(shí)現(xiàn) addInterceptors方法,從而把需要攔截的請(qǐng)求以及需要排除的請(qǐng)求注冊(cè)進(jìn)去,方便項(xiàng)目啟動(dòng)后的讀取。

package com.xing.springbootinterceptor.config;
import com.xing.springbootinterceptor.interceptor.UserInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//表明這是一個(gè)配置類 即相當(dāng)于之前的xml配置文件
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    //這個(gè)配置類主要用來添加攔截請(qǐng)求
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        String[] addPathPatterns={
                "/user/**"
        };//設(shè)置攔截的路徑 不設(shè)置將會(huì)攔截所有的請(qǐng)求
        String[] excludePathPatterns={
                "/user/out",
                "/user/error",
                "/user/login"
        };//要排除的路徑 排除的路徑說明不需要用戶登錄也可以訪問
        //InterceptorRegistry 攔截器注冊(cè)類
        registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
//        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

4.編寫控制器

前面展示了不少的url請(qǐng)求,相信沒有看到具體的控制器一定有點(diǎn)暈頭轉(zhuǎn)向的,這就展示控制器的具體代碼,如下所示:

package com.xing.springbootinterceptor.controller;
import com.xing.springbootinterceptor.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController //該注解相當(dāng)于@Controller+@ResponseBody
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/login")
    public String login(HttpServletRequest request){
    //這里只是模擬登錄 一旦輸入該請(qǐng)求 則表示登錄成功 便我往session中存值
        User user = new User();
        user.setId(1001);
        user.setUsername("張三");
        //將用戶的信息存放到session中
        request.getSession().setAttribute("user",user);
        return "login success";
    }
    //該請(qǐng)求需要用戶登錄之后才可訪問
    @RequestMapping("/center")
    public String center(){
        return "See Center Message";
    }
    //該請(qǐng)求不登錄也可以訪問
    @RequestMapping("/out")
    public String out(){
        return "Out See anytime";
    }
    //如果用戶未登錄訪問了需要登錄的請(qǐng)求 便會(huì)自動(dòng)跳轉(zhuǎn)到該路徑
    @RequestMapping("/error")
    public String error(){
        return "error";
    }
}

通過查看控制器的代碼相信大多數(shù)小伙伴就能猜測(cè)到具體項(xiàng)目演示的結(jié)果了,這里就不具體展示運(yùn)行的效果了。

總結(jié)

到此這篇關(guān)于在SpringBoot項(xiàng)目中整合攔截器的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目整合攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于RabbitMQ的Channel默認(rèn)線程

    關(guān)于RabbitMQ的Channel默認(rèn)線程

    這篇文章主要介紹了關(guān)于RabbitMQ的Channel默認(rèn)線程,通過jvm工具觀察rabbitmq的線程使用情況,發(fā)現(xiàn)生產(chǎn)者每發(fā)一條消息,消費(fèi)者這邊就會(huì)創(chuàng)建一條線程,言下之意,一個(gè)channel當(dāng)消息來到時(shí)就會(huì)異步處理這些消息,需要的朋友可以參考下
    2023-09-09
  • spring5 webclient使用指南詳解

    spring5 webclient使用指南詳解

    本篇文章主要介紹了spring 5 webclient使用指南詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 如何在Java中優(yōu)雅地使用正則表達(dá)式詳解

    如何在Java中優(yōu)雅地使用正則表達(dá)式詳解

    這篇文章主要給大家介紹了關(guān)于如何在Java中優(yōu)雅地使用正則表達(dá)式的相關(guān)資料,正則表達(dá)式就是一個(gè)字符串,但和普通的字符串不同的是,正則表達(dá)式是對(duì)一組相似字符串的抽象,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 詳解Java打包鏡像部署

    詳解Java打包鏡像部署

    這篇文章主要介紹了Java打包鏡像部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Java實(shí)現(xiàn)按年月打印日歷功能【基于Calendar】

    Java實(shí)現(xiàn)按年月打印日歷功能【基于Calendar】

    這篇文章主要介紹了Java實(shí)現(xiàn)按年月打印日歷功能,涉及java基于Calendar進(jìn)行日期運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Springboot swagger配置過程詳解(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin)

    Springboot swagger配置過程詳解(idea社區(qū)版2023.1.4+apache-maven-3

    這篇文章主要介紹了Springboot-swagger配置(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Spring基于advisor配置aop過程解析

    Spring基于advisor配置aop過程解析

    這篇文章主要介紹了Spring基于advisor配置aop過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springboot 使用yml配置文件給靜態(tài)變量賦值教程

    springboot 使用yml配置文件給靜態(tài)變量賦值教程

    這篇文章主要介紹了springboot 使用yml配置文件給靜態(tài)變量賦值教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • SpringBoot將所有依賴(包括本地jar包)打包到項(xiàng)目

    SpringBoot將所有依賴(包括本地jar包)打包到項(xiàng)目

    這篇文章主要介紹了SpringBoot將所有依賴(包括本地jar包)打包到項(xiàng)目,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法

    JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法

    這篇文章主要介紹了JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法,實(shí)例分析了java發(fā)送超文本文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論