前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSE下RequestContextHolder.getRequestAttributes()为null

CSE下RequestContextHolder.getRequestAttributes()为null

作者头像
用针戳左手中指指头
发布2021-01-29 11:04:33
2.2K0
发布2021-01-29 11:04:33
举报
文章被收录于专栏:学习计划

Springmvc它有对request和response这些对象进行上下文存储;

可以通过下面代码获取到request和response

代码语言:javascript
复制
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
HttpServletResponse response = ((ServletRequestAttributes)requestAttributes).getResponse();

但是RequestContextHolder.getRequestAttributes();这个一直NULL ,我用的CSE框架,测试过SpringBoot,不用注册监听器能正常获取到,但CSE真的头疼,看了很多博客,说是要注入监听器

代码语言:javascript
复制
@Bean
public RequestContextListener requestContextListener(){ return new RequestContextListener(); }

好吧,我也试了,也是没用,后面就像把它copy处理,自己设置,最后也是没用,一直null,后面看到RequestContextHolder的setRequestAttributes方法有个参数是是否子线程共享,所以我就在自定义的RequestContextListener里面设置:

代码语言:javascript
复制
RequestContextHolder.setRequestAttributes(attributes,true);

最后还是null,就怀疑可能在监听器后面还有什么地方有设置这个值,找到后面发现都过了一个类:RequestContextFilter,这里面会再次设置一遍,

所以解决办法就是替换掉这个过滤器就可以了。

代码语言:javascript
复制
@Bean
public RequestContextFilter requestContextFilter(){
    RequestContextFilter requestContextFilter = new RequestContextFilter();
    requestContextFilter.setThreadContextInheritable(true);
    return requestContextFilter;
}

后面我也是过使用过滤器来设置response和request,很当然的还是null,所以最后还是使用了RequestContextHolder,我也不懂,项目上又辣么急,只能这样处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档