最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Restful API的攔截詳解

 更新時間:2021年09月07日 09:32:42   作者:小志的博客  
這篇文章主要介紹了Java 調(diào)用Restful API接口的攔截,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、Restful API的攔截三種方式

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

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

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類中的方法)調(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耗時:"+(endTime-startTime));
        System.out.println("Time Filter end");
    }
    //在控制器方法(即controller類中的方法)調(diào)用之后調(diào)用
    @Override
    public void destroy() {
        System.out.println("Time Filter destroy");
    }
}

2、自定義一個WebFilterConfig配置類,步驟1中如果不使用@Component注解,需要使用基于java的配置方式實現(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;
@Configuration
public 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提供RestAPI
public 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、測試步驟

  • 啟動項目時會先輸出自定義過濾器類TimeFilter的init方式的信息,如下圖:

在這里插入圖片描述

  • 再用postman測試工具發(fā)送請求,如下圖:

在這里插入圖片描述

  • 最后查看控制態(tài)輸出信息,如下圖:
//輸出內(nèi)容
Time Filter start
query1=====xz
Filter耗時:128
Time Filter end

在這里插入圖片描述

5、輸出第4步的內(nèi)容表示自定義的Filter過濾器成功。

三、Filter過濾器特點

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

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

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

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

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

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法

    SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法

    這篇文章主要介紹了SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Spring?Boot中的微信支付全過程(小程序)

    Spring?Boot中的微信支付全過程(小程序)

    微信支付是企業(yè)級項目中經(jīng)常使用到的功能,作為后端開發(fā)人員,完整地掌握該技術(shù)是十分有必要的。今天通過本文給大家介紹Spring?Boot中的微信支付全過程,感興趣的朋友一起看看吧
    2022-05-05
  • 使用Java獲取系統(tǒng)信息的常用代碼整理總結(jié)

    使用Java獲取系統(tǒng)信息的常用代碼整理總結(jié)

    這篇文章主要介紹了使用Java獲取系統(tǒng)信息的常用代碼整理總結(jié),在服務(wù)器端一般經(jīng)常能夠用到,歡迎收藏,需要的朋友可以參考下
    2015-11-11
  • SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題

    SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題

    這篇文章主要介紹了SpringCloud zuul網(wǎng)關(guān)解決跨域問題的具體實現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • springboot項目中controller層與前端的參數(shù)傳遞方式

    springboot項目中controller層與前端的參數(shù)傳遞方式

    這篇文章主要介紹了springboot項目中controller層與前端的參數(shù)傳遞方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Java上傳文件FTP服務(wù)器代碼實例

    Java上傳文件FTP服務(wù)器代碼實例

    這篇文章主要介紹了Java上傳文件FTP服務(wù)器代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • Mybatis collection查詢集合屬性報錯的解決方案

    Mybatis collection查詢集合屬性報錯的解決方案

    這篇文章主要介紹了Mybatis collection查詢集合屬性報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring Boot實現(xiàn)Undertow服務(wù)器同時支持HTTP2、HTTPS的方法

    Spring Boot實現(xiàn)Undertow服務(wù)器同時支持HTTP2、HTTPS的方法

    這篇文章考慮如何讓Spring Boot應(yīng)用程序同時支持HTTP和HTTPS兩種協(xié)議。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • SpringBoot整合mybatisplus和druid的示例詳解

    SpringBoot整合mybatisplus和druid的示例詳解

    這篇文章主要介紹了SpringBoot整合mybatisplus和druid的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 解決java后臺登錄前后cookie不一致問題

    解決java后臺登錄前后cookie不一致問題

    本文主要介紹了java后臺登錄前后cookie不一致的解決方案,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12

最新評論

洛川县| 广昌县| 中卫市| 红河县| 会昌县| 屏南县| 五河县| 红安县| 孟村| 彭阳县| 青海省| 阿拉尔市| 桃江县| 沂水县| 安丘市| 车致| 鹤岗市| 兴城市| 房山区| 大关县| 潢川县| 涟水县| 土默特右旗| 石渠县| 景泰县| 镇雄县| 丹阳市| 平利县| 临沂市| 乌兰浩特市| 岚皋县| 五台县| 萝北县| 渑池县| 柳林县| 廉江市| 温宿县| 忻州市| 双城市| 成武县| 舞阳县|