使用 ContentCachingRequestWrapper 导致参数映射为空

2023-11-26

我已经实现了一个过滤器,在其中我想首先读取请求的内容进行一些检查,然后我想继续。

但问题是,在过滤器链的以下过滤器中getParameters()方法来自class Request (org.eclipse.jetty.server.Request)被称为而不是getParameters()方法来自class ContentCachingRequestWrapper。所以parametersMap没有被填满并且总是空的。

我的代码如下所示:

@Component
@Order(1)
public class EncodingFilter extends GenericFilterBean {

private static final Logger LOG = 
LoggerFactory.getLogger(EncodingFilter.class);

@Override
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException {

final HttpServletRequest req = (HttpServletRequest) request;
HttpServletRequest servletRequest = new ContentCachingRequestWrapper(req);

String read = ByteSource.wrap(ByteStreams.toByteArray(servletRequest.getInputStream()))
        .asCharSource(StandardCharsets.UTF_8).read();
// Doing analysis .....
// last step call filter chain
chain.doFilter(servletRequest, response);
}
}

在控制器中:

@PostMapping(
    value = Endpoints.Janus.INIT,
    produces = MediaType.TEXT_HTML_VALUE
)
public ModelAndView controller(
    @RequestParam LinkedCaseInsensitiveMap<String> params,
    HttpServletRequest servletRequest
) {
 ....  
}

在控制器中,params Map 始终为空。 如果我不在过滤器中调用 servletRequest.getInputStream(),则 params Map 会被填充。

我正在使用 Spring Boot 1.5.6,并使用 Jetty 作为应用程序服务器


ContentCachingRequestWrapper不是这样工作的并且有一些限制。仅 POST 请求和内容类型应该是application/x-www-form-urlencoded就目前我所记得的。如果这适合您,那么您应该执行以下操作:

final HttpServletRequest req = (HttpServletRequest) request;
HttpServletRequest servletRequest = new ContentCachingRequestWrapper(req);
servletRequest.getParameterMap(); // needed for caching!!

String read = ByteSource.wrap(servletRequest.getContentAsByteArray())
    .asCharSource(StandardCharsets.UTF_8).read(); // Please note that we're not touching input stream!!

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ContentCachingRequestWrapper 导致参数映射为空 的相关文章

  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • R list.files(my_working_directory) 显示没有文件,但我知道它们在那里。怎么修?

    我正在尝试使用外部硬盘驱动器中的目录作为工作目录来使用 R 我可以将工作目录设置到我想要的位置 但是当我使用list filesR什么也看不到 我也无法使用read delim加载文件 例如 gt rm list ls gt WD lt V
  • Python 2 __getattr__ 最大递归深度

    例如我使用这个代码 class A object def init self self dict1 A 3 B self A def getattr self key if key in self dict1 return self dic
  • from __future__ 导入注释

    Python 文档 future 在 python 文档中关于 future 下面有一张表显示 注释 3 7 0b1 中 可选 和 4 0 中 强制 但我仍然可以在 3 8 2 中使用注释 而无需导入注释 那它有什么用呢 gt gt gt
  • 循环平铺。如何选择块大小?

    我正在尝试学习循环优化 我发现循环平铺有助于使数组循环更快 我尝试使用下面给出的两个代码块 有和没有循环阻塞 并测量两者所花费的时间 大多数时候我没有发现显着差异 我测试了不同的块大小 但我不确定如何选择块大小 如果我的方向错误 请帮助我
  • TFS:查找更改集之间受影响的文件

    我们正在使用 Team Foundation Server 2012 我们有一个人于 2016 年 8 月 9 日在变更集 13646 中提交了 97 个文件 不包括设计器和资源文件 十 10 天后 即 2016 年 8 月 18 日 他将
  • 如何在不赋值​​的情况下声明静态可变变量?

    我尝试了以下方法 struct mbuf cacheline mut u64 great amount of rows follows below static mut arr mbuf 32 Q1 my main aim somethin
  • 如何在单个结果集中列出 SQL Server 中所有数据库中的所有表?

    我正在寻找 T SQL 代码来列出 SQL Server 中所有数据库中的所有表 至少在 SS2005 和 SS2008 中 如果也适用于 SS2000 就好了 然而 问题是我想要一个单一结果集 这排除了其他方面的优秀答案皮纳尔 戴夫 sp
  • Vuex 和 Websocket

    目前我正在使用 VueJS 2 而且我对它还很陌生 现在我得到了其他一些人的帮助 但我仍然陷入困境 这是我想要实现的目标 示例 与我想要的紧密相关 我有一个监听 WebSocket 的 NodeJS 应用程序 应用程序通过 WebSocke
  • 从前端 javascript 打印?

    是否可以在浏览器中使用带有javascript的打印机打印一些东西 我想打印收据号 所以如果可能的话 最快的打印机是什么 这样当用户单击按钮时它就会打印出来 例如 小纸上写着 1234 Thanks 您无法直接从 Javascript 访问
  • mupdf 库的 Proguard 问题

    在我尝试构建发行版本之前 我的应用程序运行良好 我收到以下错误消息 java lang NoSuchFieldError 没有名称 globals 签名 J 的字段 在 Lcom artifex mupdfdemo MuPDFCore 类中
  • SendKeys 到非活动应用程序

    我试图弄清楚如何使我的 C 应用程序将密钥发送到另一个应用程序窗口 而不需要关注它 我有一个单词列表和 3 个记事本文件 想象一下 我按顺序打开了所有 3 个记事本窗口 我的程序将获取列表框中的第一个单词并将其写入第一个记事本窗口中 第二个
  • AngularJS 查询生成器类似于 http://redquerybuilder.appspot.com/ [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在尝试仅使用 AngularJS 创建一个完整的查询生成器 我见过http redquerybuilder appspot com 这很棒 但不适用于 AngularJS 我
  • Scala 中缀类型的现实示例

    我发现了一种有趣的语法东西 它被称为Infix type Example class M T U new Int M String 现在我正在从一些流行的框架或库中寻找这种类型的示例 我在哪里可以找到它们 有什么建议么 无形图书馆 有一堆
  • 即使在 unsetenv("LD_PRELOAD") 之后,LD_PRELOAD 也会影响新的子进程

    我的代码如下 preload c 内容如下 include
  • 如何向 DropDownList 添加初始“选择”值

    如果我使用 DropDownList
  • datepicker选择星期几android

    我的应用程序中有日期选择器 它运行良好 但我需要选择星期几而不是日期 即 如果我选择日期 23 我需要获取像 星期五 这样的日期而不是数字 我用了OnDateSetListener对于点击事件 private DatePickerDialo
  • 显示 sweave 的错误

    我正在使用 Sweave 编写一些 R 笔记 并希望显示常见错误 例如 lt
  • WordPress 分页简码

    向 WordPress 大脑提出一个简单的问题 我有一个短代码 当前可以导入特定帖子类型的所有帖子 但是 我在向 wp query 添加分页时遇到问题 为了解释此代码的功能 我将 feed type attractions limit 2
  • 如何在 bazel/tensorflow 构建期间添加外部头文件

    我正在尝试添加外部头文件 如 OpenCL 头文件 以进行一些张量流实验 我尝试将其添加到 tensorflow core BUILD 文件下的 BUILD 文件中 This includes implementations of all
  • 使用 ContentCachingRequestWrapper 导致参数映射为空

    我已经实现了一个过滤器 在其中我想首先读取请求的内容进行一些检查 然后我想继续 但问题是 在过滤器链的以下过滤器中getParameters 方法来自class Request org eclipse jetty server Reques