日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot中过滤器和监听器

發布時間:2025/4/5 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot中过滤器和监听器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在很多Web項目中,都會用到過濾器(Filter),如參數過濾、防止SQL注入、防止頁面攻擊、空參數矯正、Token驗證、Session驗證、點擊率統計等。

認識過濾器

1.為什么要使用過濾器
在Web開發中,常常會有這樣的需求:在所有接口中去除用戶輸入的非法字符,以防止引起業務異常。要實現這個功能,可以有很多方法,比如

方法內容
方法1在前端參數傳入時進行校驗,先過濾掉非法字符,然后返回用戶界面提示用戶重新輸入
方法2后端接收前端沒有過濾的數據,然后過濾非法字符
方法3利用Filter處理項目中所有非法字符

前兩種方法實現時會存在重復代碼,因為每個前端頁面或后端都需要處理,這樣會導致代碼難以維護。如果用過濾器來實現,則只需要用過濾器對所有接口進行過濾處理。這樣既方便,又不會產生冗余代碼。

2.使用Filter的步驟
1)新建類,實現Filter抽象類
2)重寫init、doFilter、destroy方法
3)在Spring Boot入口中添加注解@ServletComponentScan,以注冊Filter

下面說明一下編寫過濾器類的具體邏輯
如果有多個過濾器,可以通過注解@Order來設置過濾器的執行順序,序號越小,越早被執行。

package com.example.demo.Filter; import lombok.Builder;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;@Order(1) //URL過濾設置 @WebFilter(filtername="FilterDemo01",urlPatterns = "/*")public class FilterDemo01 implements Filter{@Overridepublic void init(FilterConfig filterConfig)throws ServletException{//init邏輯,該init將在服務器啟動時被調用}@Overridepublic void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throws IOException,ServletException{//請求(request)處理邏輯//請求(request)封裝邏輯//chain重新寫回request和response}@Overridepublic void destroy(){//重寫destroy邏輯,該邏輯將在服務器關閉時被調用} }

實現過濾器

實驗結果
因為通過注解@WebFilter(urlPatterns="/*")定義了urlPatterns的變量值為 “ * ”,代表所有路徑。所以用戶在訪問本項目下的任何路徑的頁面時,此過濾器都會在控制臺輸出一下信息

攔截器

不需要添加依賴
1.新建攔截器類
FilterDemo01.java

package com.example.demo.Filter; import lombok.Builder;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;//作用范圍 @WebFilter(urlPatterns = "/*")public class FilterDemo01 implements Filter{@Overridepublic void init(FilterConfig filterConfig)throws ServletException{}@Overridepublic void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throws IOException,ServletException{System.out.println("攔截器");filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy(){} }

2.在入口類中開啟Servlet支持
直接在入口類加入@ServletComponentScan即可。
ServletApplication.java

package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication @ServletComponentScan public class ServletApplication {public static void main(String[] args) {SpringApplication.run(ServletApplication.class, args);}}

認識監聽器

監聽器(Listener)用于監聽Web應用程序中某些對象或信息的創建、銷毀、增加、修改、刪除等動作,然后做出相應的響應處理。當對象的狀態發生變化時,服務器自動調用監聽器的方法,監聽器常用于統計在線人數、在線用戶、系統加載時的信息初始化等。

監聽器有如下三種類型
1.監聽ServletContext,Request,Session作用域的創建和銷毀

  • ServletContextListener:監聽ServletContext
  • HttpSessionListener:監聽新的Session創建事件
  • ServletRequestListener:監聽ServletRequest的初始化和銷毀

2.監聽ServletContext,Request,Session作用域中屬性的變化(增加、修改、刪除)

  • ServletContextAttributeListener:監聽Servlet上下文參數的變化
  • HttpSessionAttributeListener:監聽HttpSession參數的變化
  • ServletRequestAttributeListener:監聽ServletRequest參數的變化

3.監聽HttpSession中對象狀態的改變(被綁定、解除綁定、鈍化、活化)

  • HttpSessionBindingListener:監聽HttpSession,并綁定及解除綁定
  • HttpSessionActivationListener:監聽鈍化和活動的HttpSession狀態改變

實現監聽器

實驗結果
啟動項目后,在控制臺會輸出如下信息

ServletContex 初始化 Apache Tomcat/9.0.36

1.創建監聽類
在上面過濾器項目的基礎上,創建文件Listener,并創建如下java文件

FilterDemo02.java

package com.example.demo.listener;import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @WebListener public class FilterDemo02 implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent){System.out.println("ServletContex 初始化");System.out.println(servletContextEvent.getServletContext().getServerInfo());}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent){System.out.println("ServletContex 銷毀");} }

2.開啟監聽類Bean掃描
在入口類中,添加注解@ServletComponentScan

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的SpringBoot中过滤器和监听器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。