Spring 引导请求参数未解码"+"



这个问题只适用于我们Spring Boot服务器在一个环境中的几个实例。一台服务器在三个不同的环境(DEV/TEST/PROD)中运行多个实例。以下情况在DEV和PROD以及本地都可以正常工作。在TEST.中不起作用。

搜索以'+'结尾的用户名没有被我们的服务器正确解码。有一个搜索请求是由前端的axios GET调用发出的,如下所示:

搜索参数:username+

GET请求看起来像这样:https://tst.blackrock.com/atmosportal/api/search?search=username%2B

在所有其他环境中,我们的Spring Boot控制器能够将请求参数%2B解码为开箱即用的+。因此,服务将按预期搜索username+。然而,在我们的TEST环境中,它搜索username%2B

知道为什么会这样吗?

如果没有任何源代码,如果不检查Spring应用程序中实际出现的内容,真的很难判断。不管怎样,既然你在问"一些想法",

  1. 排除任何外部原因-检查什么是真正来到Spring应用程序作为请求的URL。调试Servlet分派器

  2. 排除Spring的内层在到达端点之前执行此操作。这意味着,调试端点本身。

  3. 此时,重要的是如何从请求中获取值。是@RequestParam吗?类型只是一个字符串吗?或者它是在Spring的功能之外解析后从URL中获取的?

根据不同的环境,它可能是Spring本身的配置(更有可能),也可能是一些预处理(不太可能干扰URL参数编码)。

因此,请查看在每个环境中活动的概要文件、有条件地活动的bean、添加到链中的额外Servlet过滤器等。其中一些在TEST环境中活动可能会意外地对参数进行双重编码,或者相反-对于其他两个环境,可能存在解码参数的过滤器,但对于TEST环境禁用。

也就是说:我来到你的问题寻找为什么Spring不解码(不转义)查询参数的答案。

最新更新