我在尝试设置会话 cookie 时遇到问题Liferay 6.0 portlet。我希望能够向客户端浏览器设置一个 cookie,以存储用于 linkedin 身份验证的应用程序密钥,然后其他 portlet 可以在其中检索它。
我可以使用以下方式读取 cookie:
public void addLinkedInCV(ActionRequest request, ActionResponse response)
throws PortalException, SystemException {
HttpServletRequest convertReq = PortalUtil.getHttpServletRequest(request);
Cookie[] cookies = convertReq.getCookies();
...
}
这是我失败的阅读尝试。
@Override
public void doView(RenderRequest renderRequest,RenderResponse renderResponse) throws IOException, PortletException {
HttpServletResponse convertRes = PortalUtil.getHttpServletResponse(renderResponse);
HttpServletResponse originalRes = (HttpServletResponse) ((HttpServletResponseWrapper) convertRes).getResponse();
Cookie linkedInCookie = new Cookie("linkedIn", util.getAppKey());
originalRes.addCookie(linkedInCookie);
}
在不大量修改 Liferay 门户本身的情况下,我发现设置 portlet cookie 的唯一方法是让 portlet 生成 JavaScript,然后让客户端设置 cookie。
所以我将以下内容添加到 doView 方法中。
if (renderRequest.getPortletSession(true).getAttribute("set_cookie")!=null){
return;
}
String cookie_value = renderRequest.getPortletSession(true).getId();
String cookie_hours = "6";
StringBuffer buf = new StringBuffer();
buf.append("\n <script>");
buf.append("\n var today = new Date();");
buf.append("\n var expires_date = new Date ( today.getTime() + (" + cookie_hours + "*1000*60*60) );");
buf.append("\n document.cookie = \"linkedIn=" + util.getAppKey() + ";expires=\"+expires_date.toGMTString();");
buf.append("\n </script>");
renderResponse.setContentType("text/html");
PrintWriter out = renderResponse.getWriter();
out.println(buf.toString());
renderRequest.getPortletSession(true).setAttribute(SET_COOKIE, cookie_value);
尽管如此,这不是一个最佳的解决方案,但却是一个有效的解决方案;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)