Java 如何在Liferay portlet中设置Cookie?

Java 如何在Liferay portlet中设置Cookie?,java,portlet,liferay,Java,Portlet,Liferay,我在尝试在Liferay 6.0 portlet中设置会话cookie时遇到问题。我希望能够将cookie设置到客户端浏览器,以存储linkedin身份验证的应用程序密钥,然后其他portlet可以在其中检索该密钥 我可以通过以下方式阅读cookies: public void addLinkedInCV(ActionRequest请求,ActionResponse响应) 抛出PortalException、SystemException{ HttpServletRequest convertR

我在尝试在Liferay 6.0 portlet中设置会话cookie时遇到问题。我希望能够将cookie设置到客户端浏览器,以存储linkedin身份验证的应用程序密钥,然后其他portlet可以在其中检索该密钥

我可以通过以下方式阅读cookies:

public void addLinkedInCV(ActionRequest请求,ActionResponse响应)
抛出PortalException、SystemException{
HttpServletRequest convertReq=PortalUtil.getHttpServletRequest(请求);
Cookie[]cookies=convertReq.getCookies();
...
}
这是我读一篇失败的文章

@覆盖
public void doView(RenderRequest RenderRequest,RenderResponse RenderResponse)抛出IOException、PortletException{
HttpServletResponse convertRes=portal.getHttpServletResponse(renderResponse);
HttpServletResponse originalRes=(HttpServletResponse)((HttpServletResponseWrapper)convertRes.getResponse();
Cookie linkedInCookie=新Cookie(“linkedIn”,util.getAppKey());
原始资源添加cookie(linkedInCookie);
}

在不严重修改Liferay门户本身的情况下,我发现设置portlet cookie的唯一方法是让portlet生成javascript,然后让客户端设置cookie。

因此,我在doView方法中添加了以下内容。

if(renderRequest.getPortletSession(true).getAttribute(“set_cookie”)!=null){
返回;
}
字符串cookie_value=renderRequest.getPortletSession(true.getId();
字符串cookie_hours=“6”;
StringBuffer buf=新的StringBuffer();
buf.追加(“\n”);
追加(“\n var today=new Date();”);
buf.append(“\n var expires\u date=新日期(today.getTime()+(“+cookie\u hours+”*1000*60*60));”;
buf.append(“\n document.cookie=\”linkedIn=“+util.getAppKey()+”“expires=\”+expires\u date.togmString();”);
buf.追加(“\n”);
setContentType(“text/html”);
PrintWriter out=renderResponse.getWriter();
out.println(buf.toString());
getPortletSession(true).setAttribute(设置COOKIE、COOKIE值);
不是一个最优的解决方案,而是一个有效的解决方案;)