我有一个带有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设置,看起来没问题。
答案 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无法做出冲突的事情。