spring boot rest控制器过时参数

2w3kk1z5  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(293)

我已经使用springboot2.2.6.release实现了一个rest控制器
一开始,网络上的许多应用程序向我的控制器的一个运行示例发出请求。
我相信我看到来自多个应用程序的参数在一次对控制器的调用中被组合在一起
例如,我的控制器中的业务逻辑在收到以下url时抛出异常,我在调用控制器时立即记录该url:

2021-02-19 06:31:05.551 [http-nio-9000-exec-6] [ERROR] [RefDataServerController]: http://tbaquaappc-u2:9000/refdata/exec/text/getParticipantBitCross?instance=LINEDATA&cert=0dk7lc0vyeVEPptGwVyUXc%3DNbc0FW3IujbPTF7e&cert=Hzj%2Fqu9tIw865CMmsEP076N9mgLI3J6oFwovyt1

在这个url中有两个没有应用程序发送的'&cert'参数。
两个不同的应用程序(大约同时)发送以下独立请求

http://tbaquaappc-u2:9000/refdata/exec/text/getParticipantBitCross?instance=LINEDATA&cert=Hzj%2Fqu9tIw865CMmsEP076N9mgLI3J6oFwovyt1

http://tbaquaappc-u2:9000/refdata/exec/text/getParticipantBitCross?instance=JOHN2&cert=0dk7lc0vyeVEPptGwVyUXc%3DNbc0FW3IujbPTF7e

看起来第二个电话的&cert与第一个电话混淆了。

roejwanj

roejwanj1#

多亏了“roddy of the Frozed peas”,问题似乎确实出在了spring boot应用程序和调用者之间的web代理上。代理在原始服务器套接字上侦听来自调用者的自定义协议请求(这是一个不幸的遗留问题),并将它们传送到 JAX-RS 对应用程序的请求。代理侦听器是标准的javaserversocket代码,它阻塞/等待请求,然后在新线程上调用输入处理器,该线程将请求转发给应用程序。在输入处理器中,我有一个 org.apache.cxf.jaxrs.client.WebClient 只是做了一个 reset() 每次通话前 run() 方法。我删除了共享示例,并通过让每个线程创建一个 WebClient 内部 run() 方法将http请求转发到应用程序。这似乎解决了这个问题。可能 WebClient 不是线程安全的。

相关问题