2010-09-20 15 views
7

मुझे Liferay 6.0 पोर्टल में सत्र कुकी सेट करने का प्रयास करने में समस्याएं आ रही हैं। मैं लिंक्डइन प्रमाणीकरण के लिए एप्लिकेशन कुंजी स्टोर करने के लिए क्लाइंट ब्राउज़र पर एक कुकी सेट करने में सक्षम होना चाहता हूं, जहां इसे अन्य पोर्टलों द्वारा पुनर्प्राप्त किया जा सकता है।Liferay portlet में कुकी कैसे सेट करें?

मैं एक निम्न का उपयोग करके कुकीज़ को पढ़ने में सक्षम हूँ:

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

उत्तर

4

भारी Liferay पोर्टल खुद को संशोधित करने के बिना, मैंने पाया कि portlet कुकी सेट करने का एकमात्र तरीका portlet एक जावास्क्रिप्ट है, जो तब ग्राहक कुकी सेट करने देगा उत्पन्न है।

इसलिए मैंने निम्नलिखित कोव्यू विधि में जोड़ा।

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); 
नहीं

एक इष्टतम है, लेकिन एक काम कर समाधान nethertheless;)

संबंधित मुद्दे