【学习笔记】springboot的过滤器与拦截器的使用 springboot的事件驱动模型
文章目錄
- 過濾器
- 使用過濾器實現訪問控制
- 攔截器
- 事件驅動模型
過濾器
在實際的開發過程中,可能會遇到這樣一類需求:統計在線用戶、敏感詞過濾或者基于URL進行訪問控制。這些需求有一個共同點——在每個接口被請求時都需要進行該類操作。換而言之,如果編寫了對應以上需求的代碼,在每一個接口的某處都需要對這些代碼進行調用。不使用一些技巧的話,這個開發過程會變得異常煩瑣。
Filter(過濾器)這一概念來源于“Servlet規范”,具體的功能實現由Servlet容器(即Spring Boot內容的Tomcat)提供。過濾器的主要職責在于對資源的請求與響應的過濾,對從客戶端向服務端發送的請求進行過濾,也可以對服務端返回的響應進行處理。Filter與Servlet是有區別的。Filter雖然可以對請求與響應做出處理,但其本身并不可以產生響應。
使用過濾器實現訪問控制
(1)創建一個需要實施訪問控制的控制器。
一個簡單的例子:
在路徑src/main/java/com/example/myb-log/controller下創建SecretController.java:
(2)創建用于身份認證的控制器。如果通過了認證,控制器將在Cookie中寫入作為身份憑證的內容。
在controller路徑下創建SessionController.java:
(3)創建用于檢查憑證的過濾器。過濾器通過檢查請求中附帶的Cookie內容,以確認用戶的身份。
創建SessionFilter.java:
(4)啟用過濾器。需要在主類中使用@ServletComponentScan注解,以啟用被注解@WebFilter修飾的過濾器。
(5)分別在請求登錄接口前后訪問“受保護”的路徑,以確認訪問控制是否生效。
攔截器
Interceptor(攔截器)這一功能由Spring提供。Interceptor與Filter類似,操作粒度更小,但整體功能不如Filter強大。Interceptor支持自定義預處理(preHandle)可以在此過程中決定是否禁止程序繼續進行,自定義后續處理(postHandle)。 使用攔截器的前提是需要實現HandlerInterceptor接口。該接口包含三種主要方法: ·
preHandle():在執行實際的處理程序之前調用,但尚未生成視圖。 ·
postHandle():處理程序執行后調用。 ·
afterC ompletion():在請求已經響應并且視圖生成完畢之后調用。
使用步驟:
首先創建一個繼承HandlerInterceptorAdapter的攔截器類,使用日志打印請求中的參數。在路徑src/main/java/com/example/myblog/interceptor下創建LogRequestInterceptor.java:
然后將攔截器配置到Spring上下文。在路徑src/main/java/com/example/myblog/config下創建InterceptorConfig.java:
事件驅動模型
默認情況下,事件的發布與監聽是同步執行的。當要用到異步事件時,需要進行額外的配置。具體方式在于創建ApplicationEventMulticaster的JavaBean。在路徑src/main/java/com/example/myblog/config下創建AsynchronousEventsConfig.java:
@Configuration public class AsynchronousEventsConfig {@Bean(name = "applicationEventMulticaster")public ApplicationEventMulticaster simpleApplicationEventMulticaster() {SimpleApplicationEventMulticaster eventMulticaster = new SimpleApplicationEventMulticaster();eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());return eventMulticaster;} }總結
以上是生活随笔為你收集整理的【学习笔记】springboot的过滤器与拦截器的使用 springboot的事件驱动模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【练习】2021下半年数据结构刷题笔记和
- 下一篇: 【java的socket编程】结合多线程