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

springboot攔截器不攔截靜態(tài)資源,只攔截controller的實現(xiàn)方法

 更新時間:2023年07月11日 14:30:54   作者:cying2029  
這篇文章主要介紹了springboot攔截器不攔截靜態(tài)資源,只攔截controller的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springboot攔截器不攔截靜態(tài)資源,只攔截controller

攔截器攔截靜態(tài)資源問題

實現(xiàn)攔截器的做法就是實現(xiàn)HandlerInterceptor然后再WebMvcConfigurer里配置攔截器

這個時候,一般要手動添加過濾的靜態(tài)資源路徑,如果靜態(tài)資源路徑修改,則攔截器要修改

如果有添加其他攔截/**的攔截器,也需要配置靜過濾態(tài)資源路徑

@Configuration
public class WebConfigurer implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        String []strs = {"/static/**","/project/**","/assets/**","/login","/login.do"};
        registry.addInterceptor(loginInterceptor).excludePathPatterns(strs);
    }
}

只攔截controller方法

利用HandlerInterceptor 接口的handler

如果是controller的方法,handler為 HandlerMethod

如果是資源類,handler為 org.springframework.web.servlet.resource.ResourceHttpRequestHandler

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }
	...

實現(xiàn)

加一層抽象類,新增的攔截器繼承該抽象類,并在controllerMethodPreHandle方法實現(xiàn)業(yè)務(wù)功能,即可忽視靜態(tài)資源類

public abstract class AbstrctControllerInterceptor implements HandlerInterceptor {
    protected abstract boolean controllerMethodPreHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException;
    @Override
    public final boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //如果是controller的方法handler為HandlerMethod
        //如果是資源類則handler為org.springframework.web.servlet.resource.ResourceHttpRequestHandler
        if(handler instanceof HandlerMethod){
            return controllerMethodPreHandle(request,response,handler);
        }
        //否則不攔截
        return true;
    }
}

登錄攔截器實現(xiàn)

@Component
public class LoginInterceptor extends AbstrctControllerInterceptor {
    @Override
    protected boolean controllerMethodPreHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        Object user = request.getSession().getAttribute(ConstantValue.USER_CONTEXT_KEY);
        if(user == null){
            response.sendRedirect("/login");
            return false;
        }
        return true;
    }
}

對比之前的配置,可以忽視資源路徑了

@Configuration
public class WebConfigurer implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        String []strs = {"/static/**","/project/**","/assets/**","/login","/login.do"};
        String []strs = {"/login","/login.do"};
        registry.addInterceptor(loginInterceptor).excludePathPatterns(strs);
    }
}

springboot攔截器問題

Spring Boot 攔截器是 AOP 的一種實現(xiàn),專門攔截對控制層的請求,主要應(yīng)用于判斷用戶權(quán)限,攔截webSocket請求。

在 Spring Boot 項目中,使用攔截器功能通常需要以下 2 步:

  • 1.創(chuàng)建攔截器;
  • 2.配置攔截器,指定攔截規(guī)則(如果是攔截所有,靜態(tài)資源也會被攔截)。

第一步:創(chuàng)建攔截器

創(chuàng)建的類實現(xiàn) HandlerInterceptor 接口,即可成為攔截器類

HandlerInterceptor 接口中定義以下 3 個方法,如下表所示。

在這里插入圖片描述

實例:

/**
 * 自定義攔截器類
 */
public class MyInterceptor implements HandlerInterceptor {// 實現(xiàn)HandlerInterceptor接口
	/**
	 * 訪問控制器方法前執(zhí)行
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println(new Date() + "--preHandle:" + request.getRequestURL());
		return true;
	}
	/**
	 * 訪問控制器方法后執(zhí)行
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println(new Date() + "--postHandle:" + request.getRequestURL());
	}
	/**
	 * postHandle方法執(zhí)行完成后執(zhí)行,一般用于釋放資源
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println(new Date() + "--afterCompletion:" + request.getRequestURL());
	}
}

注意:MyInterceptor 中的方法執(zhí)行順序為 preHandle – Controller 方法 – postHandle – afterCompletion ,所以攔截器實際上可以對 Controller 方法執(zhí)行前后進行攔截監(jiān)控。

第二步:配置攔截器

/**
 * Web配置類
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
	/**
	 * 添加Web項目的攔截器
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 對所有訪問路徑,都通過MyInterceptor類型的攔截器進行攔截
		registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**")
		.excludePathPatterns("/login", "/index.html", "/user/login", "/css/**", "/images/**", "/js/**", "/fonts/**");
		 //放行登錄頁,登陸操作,靜態(tài)資源
	}
}

在指定攔截器攔截規(guī)則時,調(diào)用了兩個方法,這兩個方法的說明如下:

  • addPathPatterns:該方法用于指定攔截路徑,例如攔截路徑為“/**”,表示攔截所有請求,包括對靜態(tài)資源的請求。
  • excludePathPatterns:該方法用于排除攔截路徑,即指定不需要被攔截器攔截的請求。

總結(jié)

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

相關(guān)文章

  • IDEA常用配置之類Tab頁多行顯示方式

    IDEA常用配置之類Tab頁多行顯示方式

    這篇文章主要介紹了IDEA常用配置之類Tab頁多行顯示方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 如何通過jstack命令dump線程信息

    如何通過jstack命令dump線程信息

    這篇文章主要介紹了如何通過jstack命令dump線程信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • nacos gateway動態(tài)路由實戰(zhàn)

    nacos gateway動態(tài)路由實戰(zhàn)

    這篇文章主要介紹了nacos gateway動態(tài)路由實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot設(shè)置接口超時的方法小結(jié)

    SpringBoot設(shè)置接口超時的方法小結(jié)

    這篇文章主要介紹了SpringBoot設(shè)置接口超時的方法小結(jié),包括配置文件,config配置類及相關(guān)示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot實現(xiàn)過濾敏感詞的示例代碼

    SpringBoot實現(xiàn)過濾敏感詞的示例代碼

    這篇文章主要為大家詳細介紹了如何利用SpringBoot實現(xiàn)過濾敏感詞功能,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-08-08
  • Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用

    Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用

    這篇文章主要介紹了Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java結(jié)合uniapp實現(xiàn)驗證碼功能的示例詳解

    Java結(jié)合uniapp實現(xiàn)驗證碼功能的示例詳解

    UniApp 是一個基于 Vue.js 的跨平臺應(yīng)用開發(fā)框架,允許開發(fā)者使用統(tǒng)一的代碼庫來構(gòu)建多平臺應(yīng)用,這篇文章將給大家介紹Java結(jié)合uniapp實現(xiàn)驗證碼功能,文中通過詳細的代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-07-07
  • 全網(wǎng)最新springboot整合mybatis-plus的過程

    全網(wǎng)最新springboot整合mybatis-plus的過程

    在本文中,介紹了 MyBatis-Plus 的核心功能和使用方法,包括如何配置分頁插件、編寫分頁查詢代碼、使用各種 Wrapper 構(gòu)建復(fù)雜查詢條件等,通過這些內(nèi)容,相信你已經(jīng)對 MyBatis-Plus 有了更深入的了解,并能夠在實際項目中靈活應(yīng)用這些功能,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • SpringBoot多種自定義錯誤頁面方式小結(jié)

    SpringBoot多種自定義錯誤頁面方式小結(jié)

    這篇文章主要介紹了SpringBoot多種自定義錯誤頁面方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java獲取本機IP地址的方法代碼示例(內(nèi)網(wǎng)、公網(wǎng))

    Java獲取本機IP地址的方法代碼示例(內(nèi)網(wǎng)、公網(wǎng))

    在IT領(lǐng)域獲取本機IP地址是一項基礎(chǔ)但重要的任務(wù),特別是在網(wǎng)絡(luò)編程、遠程協(xié)作和設(shè)備通信中,這篇文章主要給大家介紹了關(guān)于Java獲取本機IP地址的方法(內(nèi)網(wǎng)、公網(wǎng)),需要的朋友可以參考下
    2024-07-07

最新評論