摘要:四過濾器攔截器切面起作用的順序先是過濾器起作用然后攔截器起作用然后切面起作用最后進入方法中五當控制層即層的方法拋異常時,過濾器攔截器切面拋異常的順序先是切面如果使用自定義異常再進入這個處理異常類然后攔截器然后過濾器如果都沒處理,最后到
1、自定義一個名稱為TimeFilter的過濾器,代碼如下:
package com.xz.springsecuritydemo.filter;import org.springframework.stereotype.Component;import javax.servlet.*;import java.io.IOException;import java.util.Date;@Component//添加該注解使過濾器啟作用,如果不使用@Component注解需要寫配置類,例lz寫的WebConfig進行注冊public class TimeFilter implements Filter { //在控制器方法(即controller類中的方法)調用之前調用 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Time Filter init"); } //在控制器方法(即controller類中的方法)調用之后調用 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("Time Filter start"); long startTime = new Date().getTime(); chain.doFilter(request,response); long endTime = new Date().getTime(); System.out.println("Filter耗時:"+(endTime-startTime)); System.out.println("Time Filter end"); } //在控制器方法(即controller類中的方法)調用之后調用 @Override public void destroy() { System.out.println("Time Filter destroy"); }}
2、自定義一個WebFilterConfig配置類,步驟1中如果不使用@Component注解,需要使用基于java的配置方式實現,代碼如下:
package com.xz.springsecuritydemo.filter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.ArrayList;@Configurationpublic class WebFilterConfig { @Bean public FilterRegistrationBean timeFilter(){ FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean(); filterRegistrationBean.setFilter(new TimeFilter()); ArrayList<String> list = new ArrayList<>(); list.add("/*");//過濾所有路徑 filterRegistrationBean.setUrlPatterns(list); return filterRegistrationBean; }}
3、自定義一個控制類,代碼如下
@RestController//表示此Controller提供RestAPIpublic class SysQueryController { /** * @RequestMapping 映射http請求url到java方法 * @RequestParam 映射請求參數到java方法的參數 */ @RequestMapping(value = "/user1",method = RequestMethod.GET) public void query1(@RequestParam String username){ System.out.println("query1====="+username); } }
4、測試步驟
啟動項目時會先輸出自定義過濾器類TimeFilter的init方式的信息,如下圖:
再用postman測試工具發送請求,如下圖:
最后查看控制態輸出信息,如下圖:
//輸出內容Time Filter startquery1=====xzFilter耗時:128Time Filter end
5、輸出第4步的內容表示自定義的Filter過濾器成功。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119348.html
摘要:目錄一的攔截三種方式二切片的演示示例項目三切片特點四過濾器攔截器切面起作用的順序五當控制層即層的方法拋異常時,過濾器攔截器切面拋異常的順序一的攔截三種方式過濾器攔截器切片二切片的演示示例項目自定義一個名稱為的切片,代碼 ...
摘要:而攔截器代理模式的實現基于反射,代理又分靜態代理和動態代理,動態代理是攔截器的簡單實現。如果是處理前后,既可以使用攔截器也可以使用過濾器,如果都使用了,注意前后順序。 前言 關于過濾器Filter和攔截器Interceptor,大家都不會陌生,從一開始的servelet,到springmvc,再到現在的springboot,都有接觸到,記得剛接觸的時候,會容易弄混淆,想寫這篇文章做個小...
摘要:攔截器原理攔截器是基于反射機制動態代理實現使用實現接口返回值表示是否需要將當前的請求攔截下來。 攔截器 原理:攔截器是基于java反射機制(動態代理)實現 使用: 實現HandlerInterceptor接口 - preHandle:返回值:boolean表示是否需要將當前的請求攔截下來。方法中Object對象標識的是被攔截的請求的目標對象 - postHandle:在Disp...
摘要:拓展閱讀調用鏈系列解讀中的貪吃蛇調用鏈系列輕調用鏈實現在中,協議的請求響應模型是由規范容器如實現的。在這篇文章中,我會向大家具體介紹如何從零開始捕獲和。配置以后,我們就可以從的方法中獲取到和后文簡稱和了。三獲取和獲取的方式大體相同。 拓展閱讀:調用鏈系列(1):解讀UAVStack中的貪吃蛇 調用鏈系列(2):輕調用鏈實現 在Java中,HTTP協議的請求/響應模型是由Servlet規...
摘要:接上篇議題合理的架構討論上傳送門。處理思路如下使用上面定義的方法獲取如果能獲取到則說明有有效的,則時候即可跳轉到目標頁如果獲取到空字符串,則說明無效或不存在,跳轉至登錄頁面。 接上篇《【Geek議題】合理的VueSPA架構討論(上)》傳送門。 自動化維護登錄狀態 登錄狀態標識符跟token類似,都是需要自動維護有效期,但也有些許不同,獲取過程只在用戶登錄或注冊的時候,不需要自動獲取。 ...
閱讀 2347·2021-11-23 09:51
閱讀 1152·2021-11-22 13:52
閱讀 3623·2021-11-10 11:35
閱讀 1205·2021-10-25 09:47
閱讀 3010·2021-09-07 09:58
閱讀 1074·2019-08-30 15:54
閱讀 2830·2019-08-29 14:21
閱讀 3042·2019-08-29 12:20