为不同的域设置Cookie

时间:2015-09-03 11:02:39

标签: java cookies vaadin

我有两个域:sharepoint.server.com和app.server.com

在域app.server.com的应用程序中,我在服务器sharepoint.server.com上执行了不可见的ntlm身份验证。

sharepoint.server.com返回给我的cookie。如何将这些cookie写入浏览器的内存?

可以编写这些cookie,但只能使用域app.server.com,但我需要使用域sharepoint.server.com编写它。

因此,如果将其写入浏览器的内存,则sharepoint.server.com将永远不会再根据现有cookie显示身份验证用户窗口。但是,它无法读取这些cookie,因为它是不同的域。

DefaultHttpClient httpClient = new DefaultHttpClient(cm,params);
httpClient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());
httpClient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY),
new NTCredentials("login", "pass", null, "server.net"));
HttpGet httpget = new HttpGet("htts://sharepoint.server.com/");
HttpResponse response;
try {
     response = httpClient.execute(httpget);
     StatusLine entity = response.getStatusLine();
     System.out.println("executing request " + httpget.getRequestLine());
     System.out.println(entity.toString());
     System.out.println("");
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
      System.out.println(header.getName() + " : " + header.getValue());
}
List<Cookie> cookies = httpClient.getCookieStore.getCookies();
for(Cookie cookie:cookies)
{
JavaApp.getInstance().getMainWindow().executeJavaScript(
"document.cookie='" + cookie.getName()+"="+cookie.getValue() +"; domain="+cookie.getDomain()+"; path="+cookie.getPath()+"'");
}

现在它根本不写cookie,因为cookie.getDomain()= sharepoint.server.com,并且无法写入。

如果我从该行删除domain = cookie.getDomain(),它会将cookie写入该组织,但使用域名“app.server.com”

但我需要使用域sharepoint.server.com

编写这些cookie

怎么可能成功呢?

2 个答案:

答案 0 :(得分:2)

您无法为其他域设置Cookie。如果可以的话,它可能是有史以来最严重的安全漏洞。

想象一下,如果你能为Facebook,谷歌等编写cookie ......

检查此主题,我认为它可以帮助您找到好的解决方案:How to set a cookie for another domain

编辑:

在SO上发现的另一个解决方案:Cross-Domain Cookies,它可能是您正在寻找的。

答案 1 :(得分:0)

将身份验证cookie的域设置为域部分,不包含子域:

JavaApp.getInstance()
    .getMainWindow().executeJavaScript(
        "document.cookie='" + cookie.getName()
        +"="+cookie.getValue() 
        +"; domain=server.com; path="
        +cookie.getPath()+"'");

现在,server.com的所有子域都可以访问此cookie