7

我有一个带有 doFilter 方法的过滤器类。在 doFilter 方法中,我设置了一个 cookie,如下所示

HttpServletResponse httpResp=(HttpServletResponse)servletResponse;
Cookie myCookie=new Cookie("test","");
myCookie.setValue("testValue");
myCookie.setPath("/");
myCookie.setDomain(".mydomain.com");
httpResp.addCookie(myCookie);
filterChain.doFilter(servletRequest,servletResponse); 

理想情况下这应该有效吗?在 httpResp(HttpServletResponse) 对象中设置一个 cookie,然后只转发 servletResponse(ServletResponse) 对象

奇怪的是,cookie 是为某些客户端设置的,但对于其他一些客户端,cookie 没有设置。我已经检查了客户端浏览器上的 cookie 设置,看起来没问题。

4

2 回答 2

-1

您可以使用 HttpServletResponseWrapper 启用过滤器来控制下游过滤器或 servlet 的响应

https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponseWrapper.html

这是对包装器的一个很好的解释:https ://stackoverflow.com/a/7047298/1676293

于 2020-05-02T22:03:45.560 回答
-2

这将起作用,除非您需要将代码重构为:

filterChain.doFilter(servletRequest,servletResponse);

HttpServletResponse httpResp=(HttpServletResponse)servletResponse; 

Cookie myCookie=new Cookie("test","");
myCookie.setValue("testValue");
myCookie.setPath("/");
myCookie.setDomain(".mydomain.com");
httpResp.addCookie(myCookie);

在 filterChain 调用之后添加 cookie,以便另一个过滤器/servlet 不能做一些冲突的事情。

于 2013-01-28T16:24:38.057 回答