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

一文詳解Java攔截器與過濾器的使用

 更新時間:2022年04月26日 15:44:40   作者:zhangzengxiu  
這篇文章主要為大家詳細介紹了Java中攔截器與過濾器的使用與區(qū)別,文中的示例代碼講解詳細,對我們學(xué)習(xí)有一定參考價值,需要的可以參考一下

流程圖

攔截器vs過濾器

攔截器是SpringMVC的技術(shù)

過濾器的Servlet的技術(shù)

先過過濾器,過濾器過完才到DispatcherServlet;

攔截器歸屬于SpringMVC,只可能攔SpringMVC的東西;

攔截器說白了就是為了增強,可以在請求前進行增強,也可以在請求后進行增強,但是不一定同時在前后都增強。

區(qū)別

SpringMVC技術(shù)架構(gòu)圖

項目Demo

項目地址

依賴

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.7.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

Interceptor攔截器

package com.test.filtertest.inter;

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

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

/**
 * 攔截器
 *
 * @author: zhangzengxiu
 * @createDate: 2022/4/22
 */
@Component
public class TestInter1 implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("TestInter1 preHandle...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("TestInter1 postHandle...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("TestInter1 afterCompletion...");
    }
}

Interceptor攔截器要注冊

package com.test.filtertest.config;

import com.test.filtertest.inter.TestInter1;
import com.test.filtertest.inter.TestInter2;
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;

/**
 * @author zhangzengxiu
 * @date 2022/4/22
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private TestInter1 testInter1;

    @Autowired
    private TestInter2 testInter2;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //默認/** 攔截所有請求
        registry.addInterceptor(testInter1).addPathPatterns("/**");
        registry.addInterceptor(testInter2);
    }
}

攔截順序

多攔截器攔截順序取決于registry的注冊順序

Filter過濾器

1、多Filter不指定過濾順序

package com.test.filtertest.filter;

import org.springframework.core.annotation.Order;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * @author zhangzengxiu
 * @date 2022/4/22
 */
@WebFilter(filterName = "TestFilter1", urlPatterns = "/*")
//@Order(2) //filter這樣定義攔截順序無效,還是會按照類名去攔截
public class TestFilter1 implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("TestFilter1 filter before ...");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("TestFilter1 filter after ...");
    }

    @Override
    public void destroy() {

    }
}

加了@WebFilter注解的過濾器要生效,需要在啟動類上加一個注解@ServletComponentScan

2、多Filter指定過濾順序

如果要設(shè)置過濾順序的話,在Filter上添加@Order 不會生效,還是會默認根據(jù)Filter過濾器的類名去進行過濾。

如果想要指定攔截順序,需要添加一個配置類,通過設(shè)置Order的值去設(shè)置過濾順序,Order數(shù)值越小優(yōu)先級越高

package com.test.config;

import com.test.filter.TestFilter1;
import com.test.filter.TestFilter2;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Filter;

/**
 * filter過濾器配置
 *
 * @author: zhangzengxiu
 * @createDate: 2022/4/24
 */
@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean testFilter1() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        Filter testFilter1 = new TestFilter1();
        filterRegistrationBean.setFilter(testFilter1);
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.setName("testFilter1");
        filterRegistrationBean.setOrder(2);//指定過濾順序,數(shù)值越小優(yōu)先級越高
        return filterRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean testFilter2() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        Filter testFilter2 = new TestFilter2();
        filterRegistrationBean.setFilter(testFilter2);
        filterRegistrationBean.setName("testFilter2");
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.setOrder(1);//指定過濾順序,數(shù)值越小優(yōu)先級越高
        return filterRegistrationBean;
    }
}

1、同時原本Filter過濾器上的@WebFilter(filterName = “TestFilter1”, urlPatterns = “/*”)

這個注解最好去掉,否則bean重復(fù)會報錯,要么bean名稱不要重復(fù),換個名稱。但是不去掉的話@ServletComponentScan也要被保留,最好統(tǒng)一格式,只使用config配置。

2、啟動類上的@ServletComponentScan 注解也不需要了,可以去掉了,因為不用掃描@WebFilter注解了。但是如果@WebFilter還保留了,那么就不能去掉了。不然加了@WebFilter的過濾器就不會生效了,因為沒掃到。

到此這篇關(guān)于一文詳解Java攔截器與過濾器的使用的文章就介紹到這了,更多相關(guān)Java攔截器 過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java通過PropertyDescriptor反射調(diào)用set和get方法

    Java通過PropertyDescriptor反射調(diào)用set和get方法

    這篇文章主要為大家詳細介紹了Java通過PropertyDescriptor反射調(diào)用set和get方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java實現(xiàn)并發(fā)執(zhí)行定時任務(wù)并手動控制開始結(jié)束

    Java實現(xiàn)并發(fā)執(zhí)行定時任務(wù)并手動控制開始結(jié)束

    這篇文章主要介紹了Java實現(xiàn)并發(fā)執(zhí)行定時任務(wù)并手動控制開始結(jié)束,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java多線程實戰(zhàn)之單例模式與多線程的實例詳解

    Java多線程實戰(zhàn)之單例模式與多線程的實例詳解

    今天小編就為大家分享一篇關(guān)于Java多線程實戰(zhàn)之單例模式與多線程的實例詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報錯問題

    maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報錯問題

    本地倉庫是遠程倉庫的一個緩沖和子集,當(dāng)你構(gòu)建Maven項目時首先會從本地倉庫查找資源,如果沒有那么Maven會從遠程倉庫下載到你本地倉庫,這篇文章主要給大家介紹了關(guān)于maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報錯問題的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java實現(xiàn)簡單推箱子游戲

    Java實現(xiàn)簡單推箱子游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 詳解Mybatis的緩存

    詳解Mybatis的緩存

    這篇文章主要介紹了Mybatis緩存的相關(guān)資料,幫助大家更好的理解和使用Mybatis框架,感興趣的朋友可以了解下
    2021-01-01
  • SpringDataJpa如何使用union多表分頁條件查詢

    SpringDataJpa如何使用union多表分頁條件查詢

    這篇文章主要介紹了SpringDataJpa如何使用union多表分頁條件查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java數(shù)組索引異常產(chǎn)生及解決方案

    Java數(shù)組索引異常產(chǎn)生及解決方案

    這篇文章主要介紹了Java數(shù)組索引異常產(chǎn)生及解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • java ExecutorService CompletionService線程池區(qū)別與選擇

    java ExecutorService CompletionService線程池區(qū)別與選擇

    這篇文章主要為大家介紹了java ExecutorService CompletionService線程池區(qū)別與選擇使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java實現(xiàn)員工信息管理系統(tǒng)

    Java實現(xiàn)員工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)員工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論