如何在gateway 中获取 webflux的 RequestContextHolder
如何在gateway 中获取 webflux的 RequestContextHolder简介:spring mvc中可以这样拿到request
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestCont
spring mvc中可以这样拿到request
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attrs.getRequest();
那么 请问如何在gateway 中获取 webflux的 request 或其上下文.
我其实想在spring gateway中调用子组件的一个reset方法(但需要当前请求的header),在zuul中可以这样把header传递出去.但用了gateway就不知道如何操作了.
@Component
public class SecuringRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}
解决方法:
@GetMapping("/test2")
@ResponseBody
public Mono<String> test2() {
WebClient webClient = testClient();
return webClient.get().uri("").retrieve().bodyToMono(String.class);
}
@Bean
public WebClient testClient() {
return WebClient.builder()
.filter(testFilterFunction())
.baseUrl("https://www.baidu.com")
.build();
}
private ExchangeFilterFunction testFilterFunction() {
return (request, next) -> ReactiveRequestContextHolder.getRequest()
.flatMap(r -> {
ClientRequest clientRequest = ClientRequest.from(request)
.headers(headers -> headers.set(HttpHeaders.USER_AGENT, r.getHeaders().getFirst(HttpHeaders.USER_AGENT)))
.build();
return next.exchange(clientRequest);
});
}
换 WebClient,亲测好用,可以的话帮我 #mica# 码云点个 star 哦~
大佬你好,我在gateway项目中参考你的方法,结果在调用 `ReactiveRequestContextHolder.getRequest()` 的方法是报错 `Context is empty` ,请问你清楚这是怎么回事嘛怎么换啊,有点没看懂,feignclient是通过注解来调用其他的服务啊回复 @如梦技术 : 期待.主要是应用场景.回复 @烨儿 : 比如说 spring boot 环境划分, url 和 header 版本,异常的统一处理,未知异常发送事件(方便监听并通知),常用的一些工具类等,里面的感觉很多东西我得录几集视频才能跟大家讲清楚 /(ㄒoㄒ)/~~回复 @如梦技术 : 我也是做企业级管理软件开发的,比如OA,项目管理等,也在用spring cloud 是否能用你这个工具集合?能做到哪些事情呢?#mica#里实现了这个功能,你可以参考:https://gitee.com/596392912/mica/tree/master/mica-boot/src/main/java/net/dreamlu/mica/reactive/context
引用来自“如梦技术”的评论
#mica#里实现了这个功能,你可以参考:https://gitee.com/596392912/mica/tree/master/mica-boot/src/main/java/net/dreamlu/mica/reactive/context
楼主在图中这地方能拿到数据吗?回复 @如梦技术 : 确定是不行了是吧?换 WebClient 吧 /(ㄒoㄒ)/~~我感觉用 RequestTemplate 可能不行,建议用 WebClient。稍等哈,我写个试试看看。亲,gateway 中获取 webflux的 request 或其上下文,结果是怎么处理啊。
请问作者,这个问题最后是如何解决的呢,我现在也遇到这个问题
本文用户投稿或网站收集转载,如有侵权请联系本站。
相关文章
推荐文章
3dmax 2010如何用放样来建模
技术知识2022-02-22WIN10安装UltraEdit软件如何解决乱码问题?
技术知识2022-02-23kafka源码搭建创建主题报错找不到主类kafka.admin.TopicCommand
技术知识2022-02-23模板引擎有哪些?
技术知识2022-02-23MYSQL单表数据达2000万性能严重下降,为什么?
技术知识2022-02-23LED显示屏可以直接访问URL地址显示网页吗
技术知识2022-02-23BmobQuery查询数据后如何传递给全局变量?
技术知识2022-02-23根据svn增量版本进行打包
技术知识2022-02-23nacos实现动态配置更新???
技术知识2022-02-23小程序开发
技术知识2022-02-23