摘要:四過濾器攔截器切面起作用的順序先是過濾器起作用然后攔截器起作用然后切面起作用最后進(jìn)入方法中五當(dāng)控制層即層的方法拋異常時(shí),過濾器攔截器切面拋異常的順序先是切面如果使用自定義異常再進(jìn)入這個(gè)處理異常類然后攔截器然后過濾器如果都沒處理,最后到
1、自定義一個(gè)名稱為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進(jìn)行注冊public class TimeFilter implements Filter { //在控制器方法(即controller類中的方法)調(diào)用之前調(diào)用 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Time Filter init"); } //在控制器方法(即controller類中的方法)調(diào)用之后調(diào)用 @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耗時(shí):"+(endTime-startTime)); System.out.println("Time Filter end"); } //在控制器方法(即controller類中的方法)調(diào)用之后調(diào)用 @Override public void destroy() { System.out.println("Time Filter destroy"); }}
2、自定義一個(gè)WebFilterConfig配置類,步驟1中如果不使用@Component注解,需要使用基于java的配置方式實(shí)現(xiàn),代碼如下:
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、自定義一個(gè)控制類,代碼如下
@RestController//表示此Controller提供RestAPIpublic class SysQueryController { /** * @RequestMapping 映射http請求url到j(luò)ava方法 * @RequestParam 映射請求參數(shù)到j(luò)ava方法的參數(shù) */ @RequestMapping(value = "/user1",method = RequestMethod.GET) public void query1(@RequestParam String username){ System.out.println("query1====="+username); } }
4、測試步驟
啟動項(xiàng)目時(shí)會先輸出自定義過濾器類TimeFilter的init方式的信息,如下圖:
再用postman測試工具發(fā)送請求,如下圖:
最后查看控制態(tài)輸出信息,如下圖:
//輸出內(nèi)容Time Filter startquery1=====xzFilter耗時(shí):128Time Filter end
5、輸出第4步的內(nèi)容表示自定義的Filter過濾器成功。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/119348.html
摘要:目錄一的攔截三種方式二切片的演示示例項(xiàng)目三切片特點(diǎn)四過濾器攔截器切面起作用的順序五當(dāng)控制層即層的方法拋異常時(shí),過濾器攔截器切面拋異常的順序一的攔截三種方式過濾器攔截器切片二切片的演示示例項(xiàng)目自定義一個(gè)名稱為的切片,代碼 ...
摘要:而攔截器代理模式的實(shí)現(xiàn)基于反射,代理又分靜態(tài)代理和動態(tài)代理,動態(tài)代理是攔截器的簡單實(shí)現(xiàn)。如果是處理前后,既可以使用攔截器也可以使用過濾器,如果都使用了,注意前后順序。 前言 關(guān)于過濾器Filter和攔截器Interceptor,大家都不會陌生,從一開始的servelet,到springmvc,再到現(xiàn)在的springboot,都有接觸到,記得剛接觸的時(shí)候,會容易弄混淆,想寫這篇文章做個(gè)小...
摘要:攔截器原理攔截器是基于反射機(jī)制動態(tài)代理實(shí)現(xiàn)使用實(shí)現(xiàn)接口返回值表示是否需要將當(dāng)前的請求攔截下來。 攔截器 原理:攔截器是基于java反射機(jī)制(動態(tài)代理)實(shí)現(xiàn) 使用: 實(shí)現(xiàn)HandlerInterceptor接口 - preHandle:返回值:boolean表示是否需要將當(dāng)前的請求攔截下來。方法中Object對象標(biāo)識的是被攔截的請求的目標(biāo)對象 - postHandle:在Disp...
摘要:拓展閱讀調(diào)用鏈系列解讀中的貪吃蛇調(diào)用鏈系列輕調(diào)用鏈實(shí)現(xiàn)在中,協(xié)議的請求響應(yīng)模型是由規(guī)范容器如實(shí)現(xiàn)的。在這篇文章中,我會向大家具體介紹如何從零開始捕獲和。配置以后,我們就可以從的方法中獲取到和后文簡稱和了。三獲取和獲取的方式大體相同。 拓展閱讀:調(diào)用鏈系列(1):解讀UAVStack中的貪吃蛇 調(diào)用鏈系列(2):輕調(diào)用鏈實(shí)現(xiàn) 在Java中,HTTP協(xié)議的請求/響應(yīng)模型是由Servlet規(guī)...
摘要:接上篇議題合理的架構(gòu)討論上傳送門。處理思路如下使用上面定義的方法獲取如果能獲取到則說明有有效的,則時(shí)候即可跳轉(zhuǎn)到目標(biāo)頁如果獲取到空字符串,則說明無效或不存在,跳轉(zhuǎn)至登錄頁面。 接上篇《【Geek議題】合理的VueSPA架構(gòu)討論(上)》傳送門。 自動化維護(hù)登錄狀態(tài) 登錄狀態(tài)標(biāo)識符跟token類似,都是需要自動維護(hù)有效期,但也有些許不同,獲取過程只在用戶登錄或注冊的時(shí)候,不需要自動獲取。 ...
閱讀 2367·2021-11-23 09:51
閱讀 1173·2021-11-22 13:52
閱讀 3644·2021-11-10 11:35
閱讀 1265·2021-10-25 09:47
閱讀 3043·2021-09-07 09:58
閱讀 1095·2019-08-30 15:54
閱讀 2849·2019-08-29 14:21
閱讀 3060·2019-08-29 12:20