国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

這篇具有很好參考價值的文章主要介紹了【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、簡介

【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

通過兩幅圖我們可以理解攔截器和過濾器的特點

1、過濾器

過濾器是在請求進入tomcat容器后,但請求進入servlet之前進行預(yù)處理的。請求結(jié)束返回也是,是在servlet處理完后,返回給前端之前。

理解上面這句話我們就可以知道,進入servlet之前,主要是兩個參數(shù):ServletRequest,ServletResponse 那我們得到這兩個測試可以干哪些事呢?

我們可以通過ServletRequest得到HttpServletRequest,此時你就可以對請求或響應(yīng)(Request、Response)那就可以對對web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進行攔截,從而實現(xiàn)一些特殊的功能。例如實現(xiàn)URL級別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息、字符集統(tǒng)一等一些高級功能。它主要用于對用戶請求進行預(yù)處理,也可以對HttpServletResponse進行后處理。使用Filter的完整流程:Filter對用戶請求進行預(yù)處理,接著將請求交給Servlet進行處理并生成響應(yīng),最后Filter再對服務(wù)器響應(yīng)進行后處理。。它是隨你的web應(yīng)用啟動而啟動的,只初始化一次,以后就可以攔截相關(guān)請求,只有當(dāng)你的web應(yīng)用停止或重新部署的時候才銷毀。(每次熱部署后,都會銷毀)。

2、攔截器

從上圖我們可以看出過濾器只在servlet前后起作用,所以它既不能捕獲異常,獲得bean對象等,這些是只能是進入servlet里面的攔截器能過做到。攔截器中用于在某個方法或字段被訪問之前,進行攔截然后,在之前或之后加入某些操作。比如日志,安全等。一般攔截器方法都是通過動態(tài)代理的方式實現(xiàn)??梢酝ㄟ^它來進行權(quán)限驗證,或者判斷用戶是否登陸,或者是像12306 判斷當(dāng)前時間是否是購票時間。

對比一下其實我們可以發(fā)現(xiàn),過濾器能做的事攔截器都能做,二攔截器做的事過濾器不一定做的了。

3、監(jiān)聽器

listener是servlet規(guī)范中定義的一種特殊類。用于監(jiān)聽servletContext、HttpSession和servletRequest等域?qū)ο蟮膭?chuàng)建和銷毀事件。監(jiān)聽域?qū)ο蟮膶傩园l(fā)生修改的事件。用于在事件發(fā)生前、發(fā)生后做一些必要的處理。其主要可用于以下方面:

  • 1、統(tǒng)計在線人數(shù)和在線用戶
  • 2、系統(tǒng)啟動時加載初始化信息
  • 3、統(tǒng)計網(wǎng)站訪問量
  • 4、記錄用戶訪問路徑。

常用的監(jiān)聽器 servletContextListener、httpSessionListener、servletRequestListener)

二、如何創(chuàng)建

1、過濾器

自定義Filter 使用Servlet3.0的注解進行配置第三步的@WebFilter就是3.0的注解

1)啟動類里面增加 @ServletComponentScan,進行掃描

2)新建一個Filter類,implements Filter,并實現(xiàn)對應(yīng)的接口

3)@WebFilter 標(biāo)記一個類為filter,被spring進行掃描

urlPatterns:攔截規(guī)則,支持正則

4)控制chain.doFilter的方法的調(diào)用,來實現(xiàn)是否通過放行不放行,web應(yīng)用resp.sendRedirect("/index.html");場景:權(quán)限控制、用戶登錄(非前端后端分離場景)等

application類

@SpringBootApplication
@ServletComponentScan
public class SpringbootstudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootstudyApplication.class, args);
    }
}

LoginFilter過濾器

//過濾器攔截路徑
@WebFilter(urlPatterns = "/api/*", filterName = "loginFilter")
public class LoginFilter  implements Filter{
          
     /**
      * 容器加載的時候調(diào)用
      */
      @Override
      public void init(FilterConfig filterConfig) throws ServletException {
          System.out.println("攔截器進入========攔截器進入========");
      }
      
      /**
       * 請求被攔截的時候進行調(diào)用
       */
      @Override
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
          System.out.println("攔截中========攔截中========");

          HttpServletRequest hrequest = (HttpServletRequest)servletRequest;
          HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) servletResponse);
          if(hrequest.getRequestURI().indexOf("/index") != -1 ||
                  hrequest.getRequestURI().indexOf("/asd") != -1 ||
                  hrequest.getRequestURI().indexOf("/online") != -1 ||
                  hrequest.getRequestURI().indexOf("/login") != -1
                  ) {
              filterChain.doFilter(servletRequest, servletResponse);
          }else {
              wrapper.sendRedirect("/login");
          }
          
      }

      /**
       * 容器被銷毀的時候被調(diào)用
       */
      @Override
      public void destroy() {
          System.out.println("攔截器銷毀========攔截器銷毀========");
      }

}

1、官網(wǎng)地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

2、監(jiān)聽器

@WebListener
public class RequestListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        // TODO Auto-generated method stub
        System.out.println("======銷毀監(jiān)聽器========");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("======進入監(jiān)聽器========");
        
    }

3、攔截器

CustomWebMvcConfigurer主攔截器需要:

1:添加@Configuration注解

2:實現(xiàn)WebMvcConfigurer接口
//主攔截器,根據(jù)攔截不同路徑跳轉(zhuǎn)不同自定義攔截器 (實現(xiàn)WebMvcConfigurer方法)
@Configuration
public class CustomWebMvcConfigurer implements WebMvcConfigurer  {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/api1/*/**");
        registry.addInterceptor(new TwoIntercepter()).addPathPatterns("/api2/*/**");
        
        //.excludePathPatterns("/api2/xxx/**"); //攔截全部 /*/*/**
        
        WebMvcConfigurer.super.addInterceptors(registry);
    }

}

LoginIntercepter子攔截器

public class LoginIntercepter implements HandlerInterceptor{

    /**
     * 進入controller方法之前
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("LoginIntercepter------->preHandle");

//        String token = request.getParameter("access_token");
//        
//        response.getWriter().print("fail");
        
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    /**
     * 調(diào)用完controller之后,視圖渲染之前
     */
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        
        System.out.println("LoginIntercepter------->postHandle");
        
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 整個完成之后,通常用于資源清理
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("LoginIntercepter------->afterCompletion");
        
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
    
    
}

TwoIntercepter同上

三、總結(jié)

最后總解一下他們:

過濾器:用于屬性甄別,對象收集(不可改變過濾對象的屬性和行為)

監(jiān)聽器:用于對象監(jiān)聽,行為記錄(不可改變監(jiān)聽對象的屬性和行為)

攔截器:用于對象攔截,行為干預(yù)(可以改變攔截對象的屬性和行為)文章來源地址http://www.zghlxwxcb.cn/news/detail-443278.html

到了這里,關(guān)于【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JavaWeb17(過濾器&監(jiān)聽器)

    JavaWeb17(過濾器&監(jiān)聽器)

    目錄 1.過濾器/攔截器-Filter. 1.1過濾器介紹. 1.2過濾器使用步驟. 1.2.1創(chuàng)建過濾器. 1.2.2映射配置. 1.3案例1-編碼設(shè)置. 1.4案例2-登陸狀態(tài)驗證. 1.4過濾鏈-略帶. 2.監(jiān)聽器-Listener. 2.1監(jiān)聽器介紹. 2.2案例演示1-統(tǒng)計在線人數(shù). 2.3案例演示2-統(tǒng)計歷史在線人數(shù). 過濾器是處于客戶端與服務(wù)器

    2024年02月07日
    瀏覽(45)
  • Spring中最簡單的過濾器和監(jiān)聽器

    Spring中最簡單的過濾器和監(jiān)聽器

    ? ??????Filter也稱之為過濾器,它是Servlet技術(shù)中最實用的技術(shù),Web開發(fā)人員通過Filter技術(shù),對web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進行攔截,從而實現(xiàn)一些特殊的功能。例如實現(xiàn)URL級別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息

    2024年02月14日
    瀏覽(20)
  • 高手速成 | 過濾器、監(jiān)聽器的創(chuàng)建與配置

    高手速成 | 過濾器、監(jiān)聽器的創(chuàng)建與配置

    ? ?本節(jié)講解過濾器、監(jiān)聽器的創(chuàng)建以及監(jiān)聽事件配置示例。 【例1】創(chuàng)建過濾器及配置過濾規(guī)則。 (1) 在Eclipse中新建一個Web項目,取名為Chapt_09。在src目錄下,新建一個名為com.test.filter的包。選中該包并按Ctrl+N組合鍵,在彈出的菜單中選擇Web→Filter。選擇創(chuàng)建過濾器,如圖

    2024年02月06日
    瀏覽(96)
  • JavaWEB學(xué)習(xí)筆記(二)------HTTP、Servlet、會話、過濾器、監(jiān)聽器、Ajax、前端工程化

    JavaWEB學(xué)習(xí)筆記(二)------HTTP、Servlet、會話、過濾器、監(jiān)聽器、Ajax、前端工程化

    目錄 HTTP HTTP1.1 請求和響應(yīng)的報文格式 請求報文 響應(yīng)報文 常見狀態(tài)響應(yīng)碼 Servlet? 靜態(tài)資源和動態(tài)資源 ?編輯 ?Servlet簡介? Servlet開發(fā)流程 導(dǎo)入和響應(yīng)頭問題 url-pattern不同寫法 url-pattern工作方式 Servlet注解方式配置 Servlet生命周期? Servlet繼承結(jié)構(gòu) Servlet接口 GenerisServlet類 Ht

    2024年01月21日
    瀏覽(28)
  • 033-安全開發(fā)-JavaEE應(yīng)用&SQL預(yù)編譯&Filter過濾器&Listener監(jiān)聽器&訪問控制

    033-安全開發(fā)-JavaEE應(yīng)用&SQL預(yù)編譯&Filter過濾器&Listener監(jiān)聽器&訪問控制

    1、JavaEE-JDBC-SQL預(yù)編譯 2、JavaEE-HTTP-Filter過濾器 3、JavaEE-對象域-Listen監(jiān)聽器 演示案例: ?JavaEE-預(yù)編譯-SQL ?JavaEE-過濾器-Filter ?JavaEE-監(jiān)聽器-Listen 提前編譯好執(zhí)行邏輯,你注入的語句不會改變原有邏輯! 預(yù)編譯寫法: safesql 是一個預(yù)編譯的 SQL 查詢語句,其中 ? 是一個占位符

    2024年02月22日
    瀏覽(18)
  • web3j的基礎(chǔ)用法-6合約的監(jiān)聽器事件Event和過濾器EthFilter,以及NullPointed,調(diào)用失敗導(dǎo)致的bug解決

    web3j的基礎(chǔ)用法-6合約的監(jiān)聽器事件Event和過濾器EthFilter,以及NullPointed,調(diào)用失敗導(dǎo)致的bug解決

    本篇以Uniswap為例(https://uniswap.org/) 合約地址 :0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 (Uni) 監(jiān)聽合約Tranfer事件 調(diào)用代碼 核心代碼實現(xiàn)在這里 之前實驗全量區(qū)塊,導(dǎo)致請求多次失敗,是由于個人RPC節(jié)點的請求和數(shù)據(jù)有限,為了測試出結(jié)果,從13763721L block到當(dāng)前,結(jié)果毫秒級返

    2024年02月11日
    瀏覽(29)
  • 【SpringBoot篇】Interceptor攔截器 | 攔截器和過濾器的區(qū)別

    【SpringBoot篇】Interceptor攔截器 | 攔截器和過濾器的區(qū)別

    攔截器(Interceptor)是一種軟件設(shè)計模式,用于在應(yīng)用程序處理請求或響應(yīng)時對其進行攔截和修改。攔截器可以在整個應(yīng)用程序中使用,用于執(zhí)行跨越多個層的通用任務(wù),如身份驗證、授權(quán)、緩存、日志記錄、性能計量等。 在Web開發(fā)中,攔截器通常用于在請求到達控制器之前

    2024年02月04日
    瀏覽(28)
  • SpringBoot 統(tǒng)計API接口用時該使用過濾器還是攔截器?

    SpringBoot 統(tǒng)計API接口用時該使用過濾器還是攔截器?

    統(tǒng)計請求的處理時間(用時)既可以使用 Servlet 過濾器(Filter) ,也可以使用 Spring 攔截器(Interceptor) 。兩者都可以在請求處理前后插入自定義邏輯,從而實現(xiàn)對請求響應(yīng)時間的統(tǒng)計。 如果你需要在更底層、與框架無關(guān)的地方記錄所有請求(包括靜態(tài)資源請求)的處理時間

    2024年01月18日
    瀏覽(27)
  • 【Spring】Springboot過濾器Filter和攔截器Inteceptor詳解及使用場景

    Springboot過濾器Filter和攔截器Inteceptor詳解及使用場景

    2024年02月13日
    瀏覽(35)
  • Spring Boot實戰(zhàn):攔截器和監(jiān)聽器的應(yīng)用指南

    Spring Boot實戰(zhàn):攔截器和監(jiān)聽器的應(yīng)用指南

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

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包