问题描述.

萌新在线踩坑....

我需要在切面中获取当前用户的请求信息,比如请求头信息.

但是不能像mvc一样通过以下方式实现.

@Autowired

private HttpServletRequest request;

ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

// 获取 request

HttpServletRequest request = requestAttributes.getRequest();

问题出现的环境背景及自己尝试过哪些方法

我尝试过自己创建一个ReactiveRequestContextHolder来获取

https://segmentfault.com/a/1190000018766412

但是返回是null.

之后

相关代码

我参考了以上的文章的代码.

以下是我的代码(我可能哪里理解错误了).

// 拦截器

// 把request对象放入Mono上下文中,key为一个class对象

@Configuration

@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)

public class ReactiveRequestContextFilter implements WebFilter {

@Override

public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {

ServerHttpRequest request = exchange.getRequest();

return chain.filter(exchange)

.subscriberContext(ctx -> ctx.put(ReactiveRequestContextHolder.CONTEXT_KEY, request));

}

}

// 上下文

// 从Mono中获取上下文,key为一个class对象

public class ReactiveRequestContextHolder {

public static final Class CONTEXT_KEY = ServerHttpRequest.class;

public static Mono getRequest() {

return Mono.subscriberContext()

// TODO 报错了 reactor.core.Exceptions$ErrorCallbackNotImplemented: java.util.NoSuchElementException: Context is empty

.map(ctx -> ctx.get(CONTEXT_KEY));

}

}

// TODO 未完成 切面bean

// 过滤含有@test注解的控制层方法,取出名为testHeader的请求头信息并打印.

@Slf4j

@Aspect

@Component

@AllArgsConstructor

public class SecurityInnerAspect {

// test 的内容被调用后进入切面

@Around("@annotation(test)")

// 不用JoinPoint 用 ProceedingJoinPoint,因为ProceedingJoinPoint可以拦截请求

public Object around(ProceedingJoinPoint point, Inner inner) throws Throwable {

ReactiveRequestContextHolder.getRequest().subscribe(serverHttpRequest -> {

String header = Objects.requireNonNull(serverHttpRequest.getHeaders().get("testHeaderStr")).get(0);

log.info("print testHeader: {}", header);

});

return point.proceed();

}

}

期待的结果

我期待能在切面中取出用户request对象进行操作.

或能有其他解决方案.

感谢!!

实际看到的错误信息

本以为会通过spring的依赖反转拿到request对象,但是他没有和mvc一样的把当前用户的request对象注册成bean.也没有放到当前线程中.

且其他方式不太会用.

so,目前没有办法在切面bean中取出request信息

java切面获取reqiest,怎么在webflux切面中获取请求头.相关推荐

  1. php获取curl头_php中CURL请求头和响应头获取方法

    本文主要和大家分享php中CURL请求头和响应头获取方法,希望能帮助到大家. 1.从CURL中获取响应头$oCurl = curl_init(); // 设置请求头, 有时候需要,有时候不用,看请求网 ...

  2. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  3. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  4. java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结

    jsp页面中获取servlet请求中的参数的办法详解 在JAVA WEB应用中,如何获取servlet请求中的参数,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs ...

  5. java如何实取随机数_java - 如何在Kotlin中获取随机数?

    java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...

  6. java jsch shell_仅在JSch shell通道中获取特定命令的输出

    我试图在使用JSch的java中获取shell脚本的输出.执行sudo管理命令并获取脚本的输出.仅在JSch shell通道中获取特定命令的输出 Properties prop = new Prope ...

  7. java 获取当前方法的名称_Java中获取当前函数名

    有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松搞定. 一提到getStatckTrace多数人会联想到Thowable中的getStackT ...

  8. java 获取继承字段_java – 从类中获取所有字段(甚至是私有的和继承的)

    我在做大学项目. 我需要从类中获取所有字段.甚至私人和继承.我试图获取所有声明字段,然后投射到超类并重复. 我的代码片段: private void listAllFields(Object obj) ...

  9. 小程序云开发获取手机号完整代码 云函数中网络请求第三方接口

    小程序云开发获取手机号完整代码 效果图: 小程序代码 <button open-type="getPhoneNumber" bindgetphonenumber=" ...

最新文章

  1. Oracle面试问题汇总
  2. 从零到一编码实现Redis分布式锁
  3. linux 下挂载光盘
  4. oracle 打印SQL
  5. 使用ant design vue 中table组件运行时not found: Error: Can't resolve 'reqwest' in 'D:\vue\antd-demo01\src\com
  6. html 居中 center,html – 如何居中的元素 – 使用什么而不是align:center属性?
  7. 刚刚看到 PNaCl, 这才是我一直期待的跨平台的好东西!
  8. 怎么设置某个用户生成hdfs文件的权限_管理 HDFS 服务
  9. 达梦和oracle数据库对比学习
  10. (Win7重装)向官方Win7镜像注入驱动程序
  11. 最新29刷网课平台系统源码+带教程
  12. cad字体安装_CAD字体如何划分?资源去哪下载?上千种字体资源,免费分享赠送...
  13. 若依移动版开发对接企业微信网页授权登陆
  14. 【计算机硬件系统设计(华科)——存储器设计(Logisim 实现)】
  15. java枚举类型学习笔记
  16. idea 重新拉maven依赖
  17. switch新机注意事项
  18. js计算两个日期之间的时间差
  19. 《统计学习方法》全部算法
  20. pika rabbitmq ssl

热门文章

  1. Oracle 常用dump命令
  2. [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及
  3. [网络安全自学篇] 三.Burp Suite安装配置、Proxy基础用法及流量分析示例
  4. [Python人工智能] 七.加速神经网络、激励函数和过拟合
  5. 【python数据挖掘课程】十五.Matplotlib调用imshow()函数绘制热图
  6. 【数据结构与算法】之深入解析“修剪二叉搜索树”的求解思路与算法示例
  7. win10下的python3.5+ opencv安装攻略
  8. 编写你的第一个 Django 应用,第 2 部分
  9. 297. Serialize and Deserialize Binary Tree
  10. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1123:图像相似度