javascript
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來設置過濾器的執行順序,序號越小,越早被執行。
實現過濾器
實驗結果
因為通過注解@WebFilter(urlPatterns="/*")定義了urlPatterns的變量值為 “ * ”,代表所有路徑。所以用戶在訪問本項目下的任何路徑的頁面時,此過濾器都會在控制臺輸出一下信息
不需要添加依賴
1.新建攔截器類
FilterDemo01.java
2.在入口類中開啟Servlet支持
直接在入口類加入@ServletComponentScan即可。
ServletApplication.java
認識監聽器
監聽器(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狀態改變
實現監聽器
實驗結果
啟動項目后,在控制臺會輸出如下信息
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
總結
以上是生活随笔為你收集整理的SpringBoot中过滤器和监听器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot用Servlet处理
- 下一篇: Java元注解