亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot 過(guò)濾器 Filter使用實(shí)例詳解

 更新時(shí)間:2022年10月08日 09:53:56   作者:后端Q  
這篇文章主要為大家介紹了SpringBoot 過(guò)濾器Filter使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

簡(jiǎn)介

過(guò)濾器是AOP(面向切面編程)思想的具體實(shí)現(xiàn)??梢赃^(guò)濾瀏覽器發(fā)出的請(qǐng)求,并且決定放行請(qǐng)求還是中斷請(qǐng)求。

在瀏覽器對(duì)服務(wù)器發(fā)起請(qǐng)求或者服務(wù)器對(duì)瀏覽器響應(yīng),都會(huì)經(jīng)過(guò)過(guò)濾器。

基于過(guò)濾器的機(jī)制,我們可以在過(guò)濾器中對(duì)請(qǐng)求和響應(yīng)做一些處理,可以在過(guò)濾器中決定是否放行,例如:校驗(yàn)請(qǐng)求中有沒(méi)有敏感字符串,校驗(yàn)有沒(méi)有Session,實(shí)現(xiàn)URL級(jí)別的權(quán)限控制、壓縮響應(yīng)信息、編碼格式等。

用法

在spring的應(yīng)用中我們存在兩種過(guò)濾的用法,一種是攔截器、另外一種當(dāng)然是過(guò)濾器。我們這里介紹過(guò)濾器在springboot的用法,在springmvc中的用法基本上一樣,只是配置上面有點(diǎn)區(qū)別。

功能

filter功能,它使用戶可以改變一個(gè) request和修改一個(gè)response. Filter 不是一個(gè)servlet,它不能產(chǎn)生一個(gè)response,它能夠在一個(gè)request到達(dá)servlet之前預(yù)處理request,也可以在離開 servlet時(shí)處理response.換種說(shuō)法,filter其實(shí)是一個(gè)”servlet chaining”(servlet 鏈).

Filter接口中有一個(gè)doFilter方法,當(dāng)開發(fā)人員編寫好Filter類實(shí)現(xiàn)doFilter方法,并配置對(duì)哪個(gè)web資源進(jìn)行攔截后,WEB服務(wù)器每次在調(diào)用web資源的service方法之前(服務(wù)器內(nèi)部對(duì)資源的訪問(wèn)機(jī)制決定的),都會(huì)先調(diào)用一下filter的doFilter方法。

實(shí)現(xiàn)

Filter的執(zhí)行由Servlet容器回調(diào)完成,因此我們不需要再額外引包。

新建MyFilter類

@Slf4j
@Order(1)
@WebFilter(filterName = "myFilter", urlPatterns = {"/user/*"})
public class MyFilter implements Filter {
    @Autowired
    private SysUserService sysUserService;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("過(guò)濾器初始化");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info("請(qǐng)求處理");
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        log.info("MyFilter, URL:{}", request.getRequestURI());
        if (request.getRequestURI().contains("login")) {
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            log.info("非法URL:{}", request.getRequestURI());
            response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
            PrintWriter writer = response.getWriter();
            writer.print("no access");
        }
    }
    @Override
    public void destroy() {
        log.info("過(guò)濾器銷毀");
    }
}

用@WebFilter注解,指定攔截路徑以及一些參數(shù),同時(shí)需要在啟動(dòng)類使用@ServletComponentScan掃描帶@WebFilter、@WebServlet、@WebListener并將幫我們注入bean

@ServletComponentScan
@SpringBootApplication
public class DevRootApplication {
    public static void main(String[] args) {
        SpringApplication.run(DevRootApplication.class, args);
    }
}

當(dāng)有多個(gè)過(guò)濾器之后,就需要規(guī)定各個(gè)過(guò)濾器的指定順序了。

使用@Order()注解

以上就是SpringBoot 過(guò)濾器 Filter使用實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Filter過(guò)濾器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解Java設(shè)計(jì)模式之備忘錄模式

    深入理解Java設(shè)計(jì)模式之備忘錄模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之備忘錄模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • SpringBoot整合Hibernate Validator實(shí)現(xiàn)參數(shù)驗(yàn)證功能

    SpringBoot整合Hibernate Validator實(shí)現(xiàn)參數(shù)驗(yàn)證功能

    這篇文章主要介紹了SpringBoot整合Hibernate Validator實(shí)現(xiàn)參數(shù)驗(yàn)證功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解Java中的println輸入和toString方法的重寫問(wèn)題

    詳解Java中的println輸入和toString方法的重寫問(wèn)題

    這篇文章主要介紹了Java中的println輸入和toString方法的重寫,一個(gè)對(duì)象數(shù)組在調(diào)用Arrays.toString打印時(shí),相當(dāng)于遍歷數(shù)組,然后打印里邊每個(gè)對(duì)象,這再打印對(duì)象就調(diào)用對(duì)象自己的toString了,需要的朋友可以參考下
    2022-04-04
  • 使用ShardingSphere-Proxy實(shí)現(xiàn)分表分庫(kù)

    使用ShardingSphere-Proxy實(shí)現(xiàn)分表分庫(kù)

    這篇文章介紹了使用ShardingSphere-Proxy實(shí)現(xiàn)分表分庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • FF瀏覽器和IE下載文件亂碼問(wèn)題的解決方法

    FF瀏覽器和IE下載文件亂碼問(wèn)題的解決方法

    大家可以看到如下截圖,下載文件出現(xiàn)了亂碼,在其他瀏覽器(IE,Chrome....)上沒(méi)有出現(xiàn)這個(gè)問(wèn)題,解決方法很簡(jiǎn)單,遇到類似問(wèn)題的朋友可以了解下哦
    2013-08-08
  • sentinel配置 持久化到nacos的詳細(xì)過(guò)程

    sentinel配置 持久化到nacos的詳細(xì)過(guò)程

    這篇文章主要介紹了sentinel配置 持久化到nacos的詳細(xì)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-08-08
  • spring boot注解方式使用redis緩存操作示例

    spring boot注解方式使用redis緩存操作示例

    這篇文章主要介紹了spring boot注解方式使用redis緩存操作,結(jié)合實(shí)例形式分析了spring boot注解方式使用redis緩存相關(guān)的依賴庫(kù)引入、注解使用及redis緩存相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java實(shí)現(xiàn)JDBC批量插入原理詳解

    Java實(shí)現(xiàn)JDBC批量插入原理詳解

    在JDBC中,executeBatch這個(gè)方法可以將多條dml語(yǔ)句批量執(zhí)行,效率比單條執(zhí)行executeUpdate高很多,這是什么原理呢?在mysql和oracle中又是如何實(shí)現(xiàn)批量執(zhí)行的呢?本文將給大家介紹這背后的原理
    2023-03-03
  • 詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄

    詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄

    這篇文章主要介紹了詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java學(xué)習(xí)之異常處理的新特性詳解

    Java學(xué)習(xí)之異常處理的新特性詳解

    異常處理機(jī)制是Java很早時(shí)就搞出來(lái)的技術(shù),但在實(shí)際應(yīng)用中,我們發(fā)現(xiàn)這個(gè)異常處理也有一些不完善的地方,接下來(lái)主要給大家介紹一下Java異常處理的一些新特性,需要的朋友可以參考下
    2023-08-08

最新評(píng)論