欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微服務(wù)如何通過feign.RequestInterceptor傳遞參數(shù)

 更新時間:2022年03月07日 11:02:07   作者:沖奶粉的奶爸  
這篇文章主要介紹了微服務(wù)如何通過feign.RequestInterceptor傳遞參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

微服務(wù)通過feign.RequestInterceptor傳遞參數(shù)

Feign 支持請求攔截器,在發(fā)送請求前,可以對發(fā)送的模板進(jìn)行操作,例如設(shè)置請求頭等屬性,自定請求攔截器需要實現(xiàn) feign.RequestInterceptor 接口,該接口的方法 apply 有參數(shù) template ,該參數(shù)類型為 RequestTemplate,我們可以根據(jù)實際情況對請求信息進(jìn)行調(diào)整,示例如下:

創(chuàng)建自定義請求攔截器

在發(fā)送請求前增加了一個請求頭信息,進(jìn)行身份校驗。

import feign.RequestInterceptor;?
import feign.RequestTemplate; ? ? ?
public class MyRequestInterceptor implements RequestInterceptor{ ? ? ?
public void apply(RequestTemplatetemplate){?
template.header("Authorization","123");?
}?
}

服務(wù)端可以通過HttpServletRequest獲取到前面?zhèn)鬟f的參數(shù)

具體獲取邏輯如下

RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
if (requestAttributes != null) {
? ? ?HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
? ? ?request.getHeader("Authorization");
?}

feign的攔截器RequestInterceptor

SpringCloud的微服務(wù)使用Feign進(jìn)行服務(wù)間調(diào)用的時候可以使用RequestInterceptor統(tǒng)一攔截請求來完成設(shè)置header等相關(guān)請求,但RequestInterceptor和ClientHttpRequestInterceptor有點不同,它拿不到原本的請求,所以要通過其他方法來獲取原本的請求

首先創(chuàng)建自定義的RequestInterceptor

這里通過RequestContextHolder獲取到當(dāng)前的request

@Slf4j
@Component
public class MyFeignInterceptor implements RequestInterceptor {
? ? @Override
? ? public void apply(RequestTemplate template) {
? ? ? ? ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
? ? ? ? log.info("===request: {}", template.url());
? ? ? ? template.header("aaaa", "bbbb");
? ? }
}

然后定義一個feign的接口類

@FeignClient(name = "SPRING-CLOUD-CLIENT-DEMO")
public interface ClientFeign {
? ? @GetMapping("/demo/get")
? ? String weight(@RequestParam String param);
}

再創(chuàng)建一個controller

@Slf4j
@RestController
@RequestMapping("/interceptor")
public class InterceptorController {
? ? @Autowired
? ? private ClientFeign clientFeign;
? ? @GetMapping("/feign")
? ? public String feign(@RequestParam String param) {
? ? ? ? return clientFeign.weight(param);
? ? }
}

運(yùn)行程序測試一下接口

查看程序打印

可以看到進(jìn)入了我們自定義的RequestInterceptor

INFO 25936 --- [ctor-http-nio-3] c.m.d.g.interceptor.MyFeignInterceptor   : ===request: /demo/weight?param=a

再查看feign調(diào)用的程序日志,可以看到設(shè)置的header信息

  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : aaaa: a
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : websession: ECF4D97D02EEAFDDA3C15A7F1F050F61
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: aaaa, bbbb
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: accept, */*
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: user-agent, Java/1.8.0_191
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: host, 39.108.15.147:8801
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: connection, keep-alive

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)字符數(shù)組全排列的方法

    Java實現(xiàn)字符數(shù)組全排列的方法

    這篇文章主要介紹了Java實現(xiàn)字符數(shù)組全排列的方法,涉及Java針對字符數(shù)組的遍歷及排序算法的實現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • Java中的接口多繼承機(jī)制

    Java中的接口多繼承機(jī)制

    大家好,本篇文章主要講的是Java中的接口多繼承機(jī)制,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Java設(shè)計模式之工廠方法模式實例簡析

    Java設(shè)計模式之工廠方法模式實例簡析

    這篇文章主要介紹了Java設(shè)計模式之工廠方法模式,較為詳細(xì)的分析了Java工廠模式的功能、定義并給出了實例代碼加以總結(jié)分析,需要的朋友可以參考下
    2015-11-11
  • Java多線程:生產(chǎn)者與消費(fèi)者案例

    Java多線程:生產(chǎn)者與消費(fèi)者案例

    這篇文章主要介紹了Java并發(fā)編程中的生產(chǎn)者與消費(fèi)者模型簡述,多線程并發(fā)是Java編程中最終要的部分之一,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • springboot使用消息中間件

    springboot使用消息中間件

    這篇文章主要介紹了springboot使用消息中間件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • java 如何為文件及文件夾添加權(quán)限

    java 如何為文件及文件夾添加權(quán)限

    這篇文章主要介紹了java 如何為文件及文件夾添加權(quán)限的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java中的類型擦除type?erasure示例詳解

    java中的類型擦除type?erasure示例詳解

    泛型是java從JDK?5開始引入的新特性,泛型的引入可以讓我們在代碼編譯的時候就強(qiáng)制檢查傳入的類型,從而提升了程序的健壯度,泛型可以用在類和接口上,在集合類中非常常見,本文將會講解泛型導(dǎo)致的類型擦除
    2023-09-09
  • Java 線程池詳解及創(chuàng)建簡單實例

    Java 線程池詳解及創(chuàng)建簡單實例

    這篇文章主要介紹了Java 線程池詳解及創(chuàng)建簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Spring boot+beetl+i18n國際化處理的方法

    Spring boot+beetl+i18n國際化處理的方法

    這篇文章主要介紹了Spring boot+beetl+i18n國際化處理的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java中構(gòu)造方法set/get和toString的使用詳解

    Java中構(gòu)造方法set/get和toString的使用詳解

    這篇文章主要介紹了Java中構(gòu)造方法set/get和toString的使用詳解,構(gòu)造函數(shù)的最大作用就是創(chuàng)建對象時完成初始化,當(dāng)我們在new一個對象并傳入?yún)?shù)的時候,會自動調(diào)用構(gòu)造函數(shù)并完成參數(shù)的初始化,需要的朋友可以參考下
    2019-07-07

最新評論