【问题标题】:Remove base domain cookies from a subdomain using Java filter使用 Java 过滤器从子域中删除基域 cookie
【发布时间】:2016-08-09 18:34:57
【问题描述】:

我正在创建一个托管自域 test.example.com 的 Java 过滤器,它将根据其名称删除某些 cookie(被禁止的 cookie 名称列表存储在过滤器的初始化配置中)。

现在,我有来自另一个站点的 cookie,这些站点的域属性设置为 .example.com。我正在开发的过滤器需要阻止/删除其中一些 cookie。

我已阅读在线文章,包括一些与 cookie 域匹配相关的 stackoverflow 帖子。我很确定这些具有域属性 .example.com 的 cookie 应该可以从子域 test.example.com 访问。事实上,使用调试我可以验证是否能够访问这些 cookie。但是,我通过调用setMaxAge(0) 并通过addCookie 将其添加回响应来删除它们时遇到问题。事实证明 cookie 被复制了,而不是被删除了。

我想知道是否可以从 test.example.com(子域)中删除具有域属性 .example.com(基本域)的 cookie。或者只有在我仅从基本域执行我的 Java 过滤器时才可能删除 cookie - 这是 example.com

这是我的代码的 sn-p:

if (cookieBlockList != null) {
    Cookie[] cookies = httpRequest.getCookies();
    for (int i=0; i < cookies.length; i++) {
        String cookieName = cookies[i].getName();

        for(int j=0; j < cookieBlockList.length; j++) {
            if (cookieName.equalsIgnoreCase(cookieBlockList[j])) {
                Cookie cookie = new Cookie(cookieName, "");
                cookie.setMaxAge(0);
                httpResponse.addCookie(cookies[i]);
            }
        }
    }
}
filterChain.doFilter(request, response);

【问题讨论】:

    标签: java cookies servlet-filters


    【解决方案1】:

    在您的代码中创建了一个新的 cookie,但它没有被使用。将其添加到响应中(而不是 cookies[i])。尝试设置 cookie 的域以匹配请求中的域:

    Cookie cookie = new Cookie(cookieName, "");
    cookie.setDomain(cookies[i].getDomain());
    cookie.setMaxAge(0);
    httpResponse.addCookie(cookie);
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多