当重定向后域不同时,Apache HttpComponents HttpContext的行为会有所不同

时间:2017-06-07 11:52:29

标签: java redirect tomcat8 http-redirect apache-httpcomponents

我做了一个非常简单的代理来模拟IAM。通过将请求传递给另一个服务器(代理服务器),它非常简单。我正在使用apache HttpComponents。服务器是TOMCAT 8(顺便说一句代理)。

现在我遇到了以下奇怪的行为,我现在无法解释,我希望有人可以帮助我。

委托请求的代码如下所示:

BasicHttpContext context = getSessionToken(request);
dumpContext("before", context);
httpResponse = httpClient.execute(httpRequest, context);
dumpContext("after", context);

getSessionToken(request)从会话中获取上下文,或者创建一个新的上下文并将其分配给会话,以便它可以与同一会话中的每个请求一起传递。

当请求被委托给与代理相同的域时,一切正常,但只要域不同,会话就会丢失。 JSESSIONID没有被传递(尽管我确实在cookie存储中看到了sessionid)。

当第一个呼叫之后是重定向时,就会出现这种情况。

如果域名相同且不同,我就转发了上下文

域名相同

accept-language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 
accept-encoding: gzip, deflate, sdch, br, 
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8,  
http.cookie-spec=default, 
http.cookie-store=[[version: 0][name: JSESSIONID][value: AD4D19BB86D3333149A92A437A676D59][domain: localhost]  
[path: /ipAbnAmroContract][expiry: null]] 
http.target_host=http://localhost:8080,   
http.route={}->http://localhost:8080,   
http.cookie-origin=[localhost:8080/ipAbnAmroContract/],   
http.response=HttpResponseProxy{HTTP/1.1 303 See Other 
[Set-Cookie: JSESSIONID=AD4D19BB86D3333149A92A437A676D59; Path=/ipAbnAmroContract; HttpOnly, 

域名不同

accept-language: en-US,en;q=0.5,                     
accept-encoding: gzip, deflate,           
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,             
http.cookie-spec=default, http.cookie-store=[[version: 0][name: JSESSIONID][value: 87FD6DC8E528348DDA0A276D840C3070][domain: proxyserver]
[path: /ipAbnAmroContract][expiry: null]] 
http.target_host=http://proxyserver:8080, 
http.route={}->http://proxyserver:8080, 
http.cookie-origin=[proxyserver:8080/ipAbnAmroContract/], 
http.response=HttpResponseProxy{HTTP/1.1 303 See Other 
[Set-Cookie: JSESSIONID=87FD6DC8E528348DDA0A276D840C3070; Path=/ipAbnAmroContract; HttpOnly

简而言之:当代理服务器在直接重定向之后发送会话ID(JSESSIONID)时,当代理服务器和代理在域其他上运行时,它会失败>而不是 localhost

测试用例

  1. 代理和代理服务器都在localhost上运行 的工作原理

  2. 代理服务器不在本地域上运行 的失败

  3. 代理和服务器都不在本地域上运行 的失败

  4. 代理不运行localhost,代理服务器执行 的工作原理

  5. 没有初始重定向 适用于上述所有用例

  6. 同步访问上下文(谢谢oleg) 对结果没有影响

  7. 感谢任何帮助。

0 个答案:

没有答案
相关问题