【问题标题】:Access to HttpServletResponse cookies访问 HttpServletResponse cookie
【发布时间】:2015-11-16 21:17:36
【问题描述】:

我正在尝试从 tomcat 6 迁移到 tomcat 8。 我必须访问 org.apache.catalina.connector.Response cookie。

在 tomcat 6 中有一种方法可以做到这一点 getCookies()

此方法在 Tomcat 8 中已弃用。请问有什么建议吗?

【问题讨论】:

  • 嗨克拉达斯。请详细说明您要实现的目标。我首先想到的是一个 ServletFilter,您可以在其中传递一个自己的 HttpServletResponseWrapper 实现,该实现覆盖 addCookie() 方法并将 cookie 存储在一个字段中,您以后可以从中检索它们...
  • 好吧,我有一个 org.apache.catalina.connector.Response 对象。此对象包含我需要实现的 cookie 数组列表。而且我不知道如何在 tomcat 8 中使用它。

标签: java apache tomcat cookies


【解决方案1】:

考虑这个过滤器:

import java.io.IOException;

import javax.servlet.*;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;

public class CookieStoringFilter implements Filter {

    public void destroy() {     
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        if(res instanceof HttpServletResponse) {
            chain.doFilter(req, new CookieStoringResponse((HttpServletResponse)res));
        } else {
            chain.doFilter(req, res);
        }
    }

    public void init(FilterConfig config) throws ServletException {     
    }

}

它将响应包装成一个叫做 CookieStoringResponse 的东西:

import java.io.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class CookieStoringResponse extends HttpServletResponseWrapper {
    protected List<Cookie> cookies;

    public CookieStoringResponse(HttpServletResponse response) {
        super(response);        
    }

    public void addCookie(Cookie c) {
        cookies.add(c);
        super.addCookie(c);
    }

    public List<Cookie> getCookies() {
        return cookies;
    }
}

安装此过滤器后(在 web.xml 中)

<filter>
    <filter-name>cookieFilter</filter-name>
    <filter-class>CookieStoringFilter</filter-class>    
</filter>
<filter-mapping>
    <filter-name>cookieFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后您可以检查响应是否属于 cookie 计数类型,然后检索添加的 cookie 列表:

public void doGet(HttpServetRequest req, HttpServletResponse res) {
    if(res instanceof CookieStoringResponse)) {
        System.out.println("I have " + ((CookieStoringResponse)res).getCookies().size() + " cookies stored");
    }
}

请记住,Cookie 也可以通过 Header-Values 设置 - 所以这可能只是一个起点。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 2015-07-03
    • 2019-02-19
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多