感谢@poutsma 的重定向更改。不幸的是,我现在遇到了另一个与重定向相关的问题。这次就涉及到set-cookie头部了。
我们有一个测试向 发出POST请求/login。它收到一个重定向响应,其中包含以下两个标头:
location: http://localhost:53640/
set-cookie: SESSION=ZGYzMDhhM2ItOTk4Yy00OThkLTg2ZDktM2U1MmFiNDA2YmI3; Path=/; HttpOnly; SameSite=Lax
与仅遵循请求重定向的简单客户端不同GET,此重定向会自动遵循并向GET发出请求http://localhost:53640/。由于没有配置 cookie 管理器,因此不会cookie发送标头。HttpClient对此请求的响应GET包含以下标头:
location: http://localhost:53640/login
set-cookie: SESSION=NTI3YTUwMDgtMjIyNS00OTI1LWFkOWUtYTM3ZjVjYzkxNGFm; Path=/; HttpOnly; SameSite=Lax
也遵循此重定向,因此GET现在向 发出请求http://localhost:53640/login。再次,没有cookie发送标头。对此的响应是带有 HTML 登录页面的 200,set-cookie响应中没有标头。以下重定向会阻止测试获取set-cookie响应原始请求而发送的标头POST,从而导致无法使用当前配置进行登录HttpClient。
在我看来,我们有两个相互竞争的要求,无法同时满足。为了匹配简单请求工厂的行为,我们需要遵循重定向,但仅限于GET请求,而新的HttpClient.这让我们在 Boot 中陷入了尴尬的境地。
如果我们引入JdkClientHttpRequestFactory对 的支持SimpleClientHttpRequestFactory,我认为这对于当前使用SimpleClientHttpRequestFactory.如果我们愿意SimpleClientHttpRequestFactory,JdkClientHttpRequestFactory自动检测将永远不会选择后者,因为SimpleClientHttpRequestFactory所需的类将始终存在。感觉这里没有一个好的答案。使用 cookie 管理器进行配置HttpClient可能会有所帮助,但我认为这并不能完全解决问题。