最近客户端开发新功能时,由于服务端跨域,导致cookie不能自动传递,引发一些列问题,如B服务端无法判断用户是否已经登陆,在研究了org.apache.http.client.cookie源码后,分享下心得,网上这方面的帖子比较少,只是本人的一些小看法,有啥不懂的大家可以继续讨论:
目前遇到的问题:
客户端A与服务器B交互的cookie无法正常传递给服务器C,导致客户端A请求C服务端时,C服务端无法判断客户端A的是否登陆状态,
解决方案:
在请求C服务端时,从发送请求的HttpClient里获取所有的cookie值,手动添加到请求的request里,这样C服务端就可以获取正确的cookie了,从而实现了cookie的共享。
获取cookie的方法 List<Cookie> cookies = lClient.getDelegate().getCookieStore().getCookies();
总结:网上还有其它方案:
跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
A机所在的域:home.langchao.com,A有应用cas
B机所在的域:jszx.com,B有应用webapp_b
1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
2)这个参数必须以“.”开始。
3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:
http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:
http://localhost:8080/webapp_b则不可以获得cookie。
4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。
大家可以测试哦,有啥好的方案也共享出来,大家共同学习。