成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Resultful API的攔截(過濾器——Filter)

ckllj / 3042人閱讀

摘要:四過濾器攔截器切面起作用的順序先是過濾器起作用然后攔截器起作用然后切面起作用最后進(jìn)入方法中五當(dāng)控制層即層的方法拋異常時(shí),過濾器攔截器切面拋異常的順序先是切面如果使用自定義異常再進(jìn)入這個(gè)處理異常類然后攔截器然后過濾器如果都沒處理,最后到

一、Resultful API的攔截三種方式

  • 過濾器(Filter)
  • 攔截器(Interceptor)
  • 切片(Aspect)

二、過濾器(Filter)的演示示例(springboot項(xiàng)目)

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過濾器成功。

三、Filter過濾器特點(diǎn)

  • 由上面的示例可知:Filter過濾器可以獲取到原始的http請求和響應(yīng)的信息,但是獲取不到真正處理請求的方法信息。

四、Filter過濾器、Interceptor攔截器 、Aspect切面起作用的順序

  • 先是Filter過濾器起作用
  • 然后Interceptor攔截器起作用
  • 然后Aspect切面起作用
  • 最后進(jìn)入Controller方法中

五、當(dāng)控制層(即Controller層)的方法拋異常時(shí),F(xiàn)ilter過濾器、Interceptor攔截器 、Aspect切面 拋異常的順序

  • 先是Aspect切面
  • 如果使用@ControllerAdvice自定義異常,再進(jìn)入這個(gè)處理異常類
  • 然后Interceptor攔截器
  • 然后Filter過濾器
  • 如果都沒處理,最后到tomcat

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/119348.html

相關(guān)文章

  • Resultful API攔截(切片Aspect)

    摘要:目錄一的攔截三種方式二切片的演示示例項(xiàng)目三切片特點(diǎn)四過濾器攔截器切面起作用的順序五當(dāng)控制層即層的方法拋異常時(shí),過濾器攔截器切面拋異常的順序一的攔截三種方式過濾器攔截器切片二切片的演示示例項(xiàng)目自定義一個(gè)名稱為的切片,代碼 ...

    huaixiaoz 評論0 收藏0
  • springboot(五)——springboot中攔截器和濾器小結(jié)

    摘要:而攔截器代理模式的實(shí)現(xiàn)基于反射,代理又分靜態(tài)代理和動態(tài)代理,動態(tài)代理是攔截器的簡單實(shí)現(xiàn)。如果是處理前后,既可以使用攔截器也可以使用過濾器,如果都使用了,注意前后順序。 前言 關(guān)于過濾器Filter和攔截器Interceptor,大家都不會陌生,從一開始的servelet,到springmvc,再到現(xiàn)在的springboot,都有接觸到,記得剛接觸的時(shí)候,會容易弄混淆,想寫這篇文章做個(gè)小...

    Magicer 評論0 收藏0
  • spring中濾器攔截區(qū)別

    摘要:攔截器原理攔截器是基于反射機(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...

    gotham 評論0 收藏0
  • 調(diào)用鏈系列(3):如何從零開始捕獲body和header

    摘要:拓展閱讀調(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ī)...

    hqman 評論0 收藏0
  • 【Geek議題】合理VueSPA架構(gòu)討論(下)

    摘要:接上篇議題合理的架構(gòu)討論上傳送門。處理思路如下使用上面定義的方法獲取如果能獲取到則說明有有效的,則時(shí)候即可跳轉(zhuǎn)到目標(biāo)頁如果獲取到空字符串,則說明無效或不存在,跳轉(zhuǎn)至登錄頁面。 接上篇《【Geek議題】合理的VueSPA架構(gòu)討論(上)》傳送門。 自動化維護(hù)登錄狀態(tài) 登錄狀態(tài)標(biāo)識符跟token類似,都是需要自動維護(hù)有效期,但也有些許不同,獲取過程只在用戶登錄或注冊的時(shí)候,不需要自動獲取。 ...

    mindwind 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<