Как установить Cookie в портлете Liferay? - PullRequest
8 голосов
/ 20 сентября 2010

У меня проблемы с попыткой установить cookie для сессии в Liferay 6.0 портлетах .Я хочу иметь возможность установить cookie в браузере клиента для хранения ключа приложения для аутентификации linkedin, где он может быть затем извлечен другими портлетами.

Я могу читать куки, используя следующее:1005 *

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);
}

1 Ответ

5 голосов
/ 28 сентября 2010

Не внося значительных изменений в сам портал Liferay, я обнаружил, что единственный способ установить файлы cookie портлета - это создать портлет 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);

Не оптимальный, но рабочий решение, не смотря на это;)

...