使用Java过滤器

时间:2016-08-09 18:34:58

标签: java cookies servlet-filters

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

现在,我有来自其他网站的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

以下是我的代码片段:

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);

1 个答案:

答案 0 :(得分:1)

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

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