網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
通過(guò)攔截器
通過(guò)實(shí)現(xiàn)Feign的RequestInterceptor接口,重寫(xiě)里面的apply方法,為RequestTemplate添加請(qǐng)求頭信息
@Component
public class FeignClientsConfigurationCustom implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
// 此種方式是線(xiàn)程安全的
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
// 不為空時(shí)取出請(qǐng)求中的header 原封不動(dòng)的設(shè)置到feign請(qǐng)求中
if (null != attributes) {
HttpServletRequest request = attributes.getRequest();
if (null != request) {
// 遍歷設(shè)置 也可從request取出整個(gè)Header 寫(xiě)到RequestTemplate 中
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}
}
}
@Headers注解
@FeignClient(name = "testClient", configuration = FeignClientsConfigurationCustom.class)
public interface testServer{
@GetMapping("/test")
@Headers({"Content-Type: application/json","Accept: application/json"})
String test(@RequestParam String param);
}
異步
無(wú)法直接通過(guò)獲取HttpServletRequest來(lái)獲取Header,那么可以稍微改造一下,在原來(lái)的基礎(chǔ)上添加一個(gè)攔截器。 所有的請(qǐng)求過(guò)來(lái)的時(shí)候,在攔截器中將Header先取出來(lái),然后設(shè)置到本線(xiàn)程私有的Map中。
原來(lái)的apply方法在提交請(qǐng)求的時(shí)候再通過(guò)ThreadLocal提供的remove方法,清除掉。
原文鏈接:https://blog.csdn.net/weixin_35973945/article/details/125806849
相關(guān)推薦
- 2023-03-27 Go語(yǔ)言實(shí)現(xiàn)的可讀性更高的并發(fā)神庫(kù)詳解_Golang
- 2022-11-05 Swift運(yùn)算符使用方法淺析_Swift
- 2022-06-19 Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解_云其它
- 2022-10-01 react使用useState修改對(duì)象或者數(shù)組的值無(wú)法改變視圖的問(wèn)題_React
- 2022-12-26 python使用Pyinstaller如何打包整個(gè)項(xiàng)目_python
- 2022-11-04 React組件化學(xué)習(xí)入門(mén)教程講解_React
- 2022-06-25 JQuery操作與遍歷元素并設(shè)置其屬性、樣式和內(nèi)容_jquery
- 2022-07-03 對(duì)比分析BN和dropout在預(yù)測(cè)和訓(xùn)練時(shí)區(qū)別_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支