java切面获取reqiest,怎么在webflux切面中获取请求头.
问题描述.
萌新在线踩坑....
我需要在切面中获取当前用户的请求信息,比如请求头信息.
但是不能像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切面中获取请求头.相关推荐
- php获取curl头_php中CURL请求头和响应头获取方法
本文主要和大家分享php中CURL请求头和响应头获取方法,希望能帮助到大家. 1.从CURL中获取响应头$oCurl = curl_init(); // 设置请求头, 有时候需要,有时候不用,看请求网 ...
- 获取存储过程返回值及代码中获取返回值
获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...
- 获取存储过程返回值及代码中获取返回值(转)
获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...
- java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结
jsp页面中获取servlet请求中的参数的办法详解 在JAVA WEB应用中,如何获取servlet请求中的参数,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs ...
- java如何实取随机数_java - 如何在Kotlin中获取随机数?
java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...
- java jsch shell_仅在JSch shell通道中获取特定命令的输出
我试图在使用JSch的java中获取shell脚本的输出.执行sudo管理命令并获取脚本的输出.仅在JSch shell通道中获取特定命令的输出 Properties prop = new Prope ...
- java 获取当前方法的名称_Java中获取当前函数名
有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松搞定. 一提到getStatckTrace多数人会联想到Thowable中的getStackT ...
- java 获取继承字段_java – 从类中获取所有字段(甚至是私有的和继承的)
我在做大学项目. 我需要从类中获取所有字段.甚至私人和继承.我试图获取所有声明字段,然后投射到超类并重复. 我的代码片段: private void listAllFields(Object obj) ...
- 小程序云开发获取手机号完整代码 云函数中网络请求第三方接口
小程序云开发获取手机号完整代码 效果图: 小程序代码 <button open-type="getPhoneNumber" bindgetphonenumber=" ...
最新文章
- Oracle面试问题汇总
- 从零到一编码实现Redis分布式锁
- linux 下挂载光盘
- oracle 打印SQL
- 使用ant design vue 中table组件运行时not found: Error: Can't resolve 'reqwest' in 'D:\vue\antd-demo01\src\com
- html 居中 center,html – 如何居中的元素 – 使用什么而不是align:center属性?
- 刚刚看到 PNaCl, 这才是我一直期待的跨平台的好东西!
- 怎么设置某个用户生成hdfs文件的权限_管理 HDFS 服务
- 达梦和oracle数据库对比学习
- (Win7重装)向官方Win7镜像注入驱动程序
- 最新29刷网课平台系统源码+带教程
- cad字体安装_CAD字体如何划分?资源去哪下载?上千种字体资源,免费分享赠送...
- 若依移动版开发对接企业微信网页授权登陆
- 【计算机硬件系统设计(华科)——存储器设计(Logisim 实现)】
- java枚举类型学习笔记
- idea 重新拉maven依赖
- switch新机注意事项
- js计算两个日期之间的时间差
- 《统计学习方法》全部算法
- pika rabbitmq ssl
热门文章
- Oracle 常用dump命令
- [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及
- [网络安全自学篇] 三.Burp Suite安装配置、Proxy基础用法及流量分析示例
- [Python人工智能] 七.加速神经网络、激励函数和过拟合
- 【python数据挖掘课程】十五.Matplotlib调用imshow()函数绘制热图
- 【数据结构与算法】之深入解析“修剪二叉搜索树”的求解思路与算法示例
- win10下的python3.5+ opencv安装攻略
- 编写你的第一个 Django 应用,第 2 部分
- 297. Serialize and Deserialize Binary Tree
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1123:图像相似度