从doFilter方法设置cookie

时间:2013-01-28 16:04:05

标签: java cookies servlet-filters

我有一个带有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设置,看起来没问题。

2 个答案:

答案 0 :(得分:0)

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

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

以下是包装程序的一个很好的解释:https://stackoverflow.com/a/7047298/1676293

答案 1 :(得分:-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无法做出冲突的事情。