Spring Boot 不允许 URL 中通过百分比和反斜杠

2023-12-15

我们收到一个 get 请求,该请求在 url 中发送字符串字符,因此我们使用路径变量来接收它们。显然,调用服务无法更改其调用后端的方法,因此我们需要能够接受包含以下未编码字符的 url:

当发送百分号 % 时,将返回 http 400。如果 % 后面的两个字符组成 UTF 编码字符,则它确实通过

反斜杠转换为正斜杠。我需要它保留反斜杠。

我猜这些可能是 Tomcat 或 servlet 配置问题。

(春季启动版本1.5.14.RELEASE)


如果你正确地对百分号 (%) 进行 URL 编码(%25)。然而,斜杠和反斜杠在 Tomcat 中不起作用,即使您对它们进行了编码(%2F and %5C).

您可以在运行应用程序时设置以下属性:

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true

但是,这并不能解决问题,因为在这种情况下,这些编码的斜杠将被识别为真实的斜杠。因此,假设您有以下控制器:

@ResponseBody
@RequestMapping("/api/{foo}")
public String getFoo(@PathVariable String foo) {
    return foo;
}

好吧,那么如果你打电话/api/test%5Ctest,它将无法找到正确的路径。解决此问题的方法是使用通配符匹配器并从传入的 URL 本身解析HttpServletRequest:

@RequestMapping("/api/**")
public String getFoo(HttpServletRequest request) {
    // ...
}

另一个解决方案是使用完全不同的 Web 容器。例如,当使用 Jetty 时,这根本不是问题,URL 编码的斜杠和反斜杠都可以工作。

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

Spring Boot 不允许 URL 中通过百分比和反斜杠 的相关文章

随机推荐

  • 在 Thinking Sphinx 中使用 Delta 索引进行关联

    我有一个产品型号 class Product lt ActiveRecord Base belongs to subcategory define index do fields indexes subcategory name as gt
  • 如何将 PHP 数组参数传递给 Javascript 函数?

    index php
  • 如何向所有用户授予我的应用程序创建的文件的完全权限?

    我开发的工具需要授予对其创建的文件 完全控制 访问权限 需要从所有 Windows 帐户甚至未来可能的帐户中读取 修改和删除它 这能实现吗 我知道我可以为特定用户尝试这个 FileSystemAccessRule rule new File
  • Xamarin.iOS 本机链接错误 MTOUCH MT5210 未定义符号 std::string

    我的 Xamarion iOS 绑定项目具有指向所有必需的本机视频 SDK 库和本机操作系统框架的链接 我已经使用 Frameworks 属性设置了所需的框架 其他设置包括 SmartLink true ForceLoad true IsC
  • ClearCase 不允许签入

    我对 ClearCase 相当陌生 但已经搜索了以下问题的很多解决方案 但没有成功 当我尝试办理登机手续时 出现以下错误 我的文件 检查时出错 没有权限执行 签入 操作 必须是以下之一 对象创建者 元素所有者 VOB 所有者 ClearCa
  • Neo4j 因果集群优于高可用性集群

    我们正在将 HA 集群迁移到因果集群 从 HA 集群迁移到因果集群有什么真正的优势吗 目前仅使用 REST 端点 是否可以仅使用两个 Neo4j 实例进行因果聚类 谢谢 因果集群是新一代的 Neo4j 集群 它将随着新版本的发布而不断发展
  • 实现 NHibernate 嵌套事务行为

    我正在尝试使用 NHibernate 的事务控制和 FlushMode 选项来实现某种嵌套事务行为 但是在阅读过多之后事情变得有点混乱 因此对我下面列出的事实的任何确认都将非常有用 我想要的是打开一笔大交易 然后拆分成小交易 想象一下以下场
  • 通过将 data.frame 的列名传递到 apply() 或 plyr 函数来替换所选列中的值

    假设我有一个 date frame 像 df lt data frame a 1 5 b sample 1 5 5 replace TRUE c 5 1 df a b c 1 1 4 5 2 2 3 4 3 3 5 3 4 4 2 2 5
  • 在 R 中创建重复向量序列[重复]

    这个问题在这里已经有答案了 我需要一些帮助 如何创建以下向量序列 1 1 1 1 2 2 2 3 3 4 我尝试使用 rep 和 seq 但仍然不成功 尝试这个 rep 1 4 4 1 Output 1 1 1 1 1 2 2 2 3 3
  • “cscript //NoLogo”代表什么?

    这是一个java程序代码 运行记事本程序并粘贴存储在该程序本身中的特定文本 我想知道你能否向我解释一下String vbs值 以及File file 以及 cscript NoLogo file getPath in the Process
  • 只检索更改的文档字段

    我发现监听文档变化会总是一遍又一遍地下载完整的文档 在以下情况下我遇到问题 文档的大小正在接近1 MiB 这是文档大小的限制 现在 有一个number场即仅字段更新 这只是几个字节 但是 收听此更改 例如对帖子的点赞 将始终下载完整的1 M
  • Firefox 在伪元素周围添加了奇怪的空间

    看看这些照片 JSFiddle链接在底部 firefox chrome 它们都是从 chrome 和 Firefox 中获取的相同元素 正如您所看到的 来自 Firefox 的元素在其顶部和左侧周围有一些空间 但来自 chrome 的元素没
  • Dompdf 在 Laravel 中封装其他语言支持

    我在 laravel 项目中使用 dompdf 包创建了我的 pdf 但是当我想渲染其他语言 孟加拉 而不是英语时 显示 div style margin 50px padding 10px div align center h2 Anti
  • C 拆分 CMD 参数

    我正在尝试做某事 但我可以 我有一个 C 程序 我想在其中解析所有参数 让我们更具体一点 EDIT 我在缓冲区中读取命令 而不是在程序以 argv 等启动时读取命令 我使用 fgets 从 STDIN 读取命令 假设我读了这样的命令行 ls
  • 根据列表索引组合字典列表

    我觉得这个问题以前肯定有人问过 但在 Stack Overflow 上找不到 有没有一种方法可以根据列表索引优雅地组合多个字典列表 见下文 list 1 hello world foo test list 2 a b c d result
  • 将 JSON IPython 笔记本 (.ipynb) 转换为 .py 文件

    如何转换 IPython 笔记本文件 json 与 ipynb扩展 到常规 py module 从笔记本菜单中 您可以将文件直接保存为 python 脚本 转到菜单的 文件 选项 然后选择 下载为 您将看到 Python py 选项 另一种
  • javascript,当右div隐藏时左div必须是100%宽度

    FIXED 通过将 mplungjan 的代码编辑为以下内容来修复它 function foo on click function if this is checked checked a show fast function checke
  • 错误 1452 MySQL

    向空表中插入数据 但出现错误 1452 我不知道为什么 MySQL 在错误中提到了 NameInfo 表 CREATE TABLE NameInfo Language VARCHAR 7 NOT NULL Status VARCHAR 13
  • 如何指定涉及中间局部变量引用的闭包的生命周期界限?

    我正在尝试用 Rust 编写一个如下所示的函数 fn double and square lt a T gt x a T gt whatever the output type of t t is let t x x t t 我希望它适用于
  • Spring Boot 不允许 URL 中通过百分比和反斜杠

    我们收到一个 get 请求 该请求在 url 中发送字符串字符 因此我们使用路径变量来接收它们 显然 调用服务无法更改其调用后端的方法 因此我们需要能够接受包含以下未编码字符的 url 当发送百分号 时 将返回 http 400 如果 后面