HttpClient在二级域名下保持登录

QingtianD 2019-12-26 09:35:31
例如abc.123.com这个页面下用httpclient进行登录,登录之后访问abc.123.com下的资源都没问题。
想要想要访问ddd.123.com就会显示会话已过期。请问大佬们怎么解决啊
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2019-12-30
  • 打赏
  • 举报
回复
引用 4 楼 Nihility/ 的回复:
[quote=引用 3 楼 maradona1984 的回复:] 自己维护一个保存cookie的对象,不是一个域你都能发同样的header过去,这个相当灵活了,没有浏览器的安全限制
能不能贴下代码,HttpClient 4.x的版本已经实现了自动管理cookie,楼主这个没做过这个需求,不知道是不是4.x的版本。[/quote] 我的意思是不需要用他提供的cookie实现,直接自己取出来,然后再塞进去,这样你就没有跨域一说
Nihility/ 2019-12-29
  • 打赏
  • 举报
回复
设置一下请求头参数,比如referer
QingtianD 2019-12-27
  • 打赏
  • 举报
回复
引用 1 楼 zxshuo的回复:
用cookiestroe管理cookie
确实用了,跳到二级页面cookiestore里新增了一个jsessionid
zxshuo 2019-12-27
  • 打赏
  • 举报
回复
用cookiestroe管理cookie
maradona1984 2019-12-27
  • 打赏
  • 举报
回复
自己维护一个保存cookie的对象,不是一个域你都能发同样的header过去,这个相当灵活了,没有浏览器的安全限制
QingtianD 2019-12-27
  • 打赏
  • 举报
回复
引用 4 楼 Nihility/ 的回复:
[quote=引用 3 楼 maradona1984 的回复:] 自己维护一个保存cookie的对象,不是一个域你都能发同样的header过去,这个相当灵活了,没有浏览器的安全限制
能不能贴下代码,HttpClient 4.x的版本已经实现了自动管理cookie,楼主这个没做过这个需求,不知道是不是4.x的版本。[/quote] 大概代码如下:
<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.6</version>
</dependency>

CookieStore cookieStore = new BasicCookieStore();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
HttpPost httpPost = new HttpPost("http://abc.123.com/slogin");
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("userName", username));
parameters.add(new BasicNameValuePair("pwd", pwd));
parameters.add(new BasicNameValuePair("certCode", code));
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpGet getScore = new HttpGet("http://abc.123.com/msg/receive/list");
HttpResponse scoreResponse = httpClient.execute(getScore);
String rawHtml = EntityUtils.toString(scoreResponse.getEntity(),"UTF-8");
//可以打印出来登录才能看的原生html代码
//打印出来的cookiestore只有一个jsessionid
System.out.println(rawHtml);
HttpGet getAll = new HttpGet("http://ddd.123.com/all");
HttpResponse scoreResponse = httpClient.execute(getAll);
String rawHtml2 = EntityUtils.toString(scoreResponse.getEntity(),"UTF-8");
//可以打印出来原生html就是会话已过期,请登录
//在这打印出来的cookiesore里有两个jsessionid
System.out.println(rawHtml2);
Nihility/ 2019-12-27
  • 打赏
  • 举报
回复
引用 3 楼 maradona1984 的回复:
自己维护一个保存cookie的对象,不是一个域你都能发同样的header过去,这个相当灵活了,没有浏览器的安全限制
能不能贴下代码,HttpClient 4.x的版本已经实现了自动管理cookie,楼主这个没做过这个需求,不知道是不是4.x的版本。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧