注意:Portlet 规范对 cookie有这样的说法:
PLT.12.1.4 设置 Cookie
Portlet 可以通过addProperty
带有javax.servlet.http.Cookie
as 参数的方法在响应中设置 HTTP cookie。门户应用程序不需要将 cookie 传输到客户端。因此,portlet 不应该假定它可以访问客户端上的 cookie,或者使用不是由 portlet API 生成的 URL 触发的请求可以访问 cookie。
在一个生命周期调用的响应中设置的 cookie 应该在后续的生命周期调用中可供 portlet 使用,例如,在其中设置 cookieprocessAction
应该使 portlet 能够在下一次render
调用中检索 cookie。
对于通过 portlet URL 触发的请求,portlet 应该接收回 cookie。可以通过该request.getCookies
方法检索 Cookie。
Cookies 是属性,上述关于属性的所有限制也适用于 cookie,即要成功传输回客户端,必须在提交响应之前设置 cookie。Portlet 容器将忽略在响应提交时render
或提交响应之后设置的 Cookie 。serveResource
在呈现生命周期阶段设置 cookie 时,portlet 应该在呈现头部分设置 cookie,或者简单地覆盖该
GenericPortlet.doHeaders
方法,以便在所有门户实现上以最高性能运行(参见 PLT.11.1.1.4.3)。
因此,如果您确实依赖于浏览器中可用的 HTTP Cookie:您不能假设它存在,因为它只是一个门户内部“属性”,模拟 cookie 的行为。
如果您需要在 HTTP/Browser 上可用的 Cookie,则必须依赖于门户实现(检查它)或通过 Javascript 设置它,或者找到不同的解决方案。如果您只需要数据可用,请使用addProperty
,就像 Ankit P 在另一个答案中提到的那样。我怀疑(由于规范)您是否需要获得HttpServletRequest
它:cookie 应该已经在PortletRequest
(发起请求的 portlet 的)上可用。