In this short article, we will show two code examples; for example, one will be showcasing how cookies values can be accessed for an AEM Servlet, and for example two, Sling Model.
1. AEM Servlet Get Cookie Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package com.sourcedcode.core.servlet; import com.cat.wcm.core.util.JSONObject; import org.apache.commons.lang.StringUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingAllMethodsServlet; import org.osgi.service.component.annotations.Component; import javax.servlet.Servlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import static org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_PATHS; @Component( service = { Servlet.class }, property = { SLING_SERVLET_PATHS + "=/bin/getCookieExample" } ) public class GetCookieServletExample extends SlingAllMethodsServlet { @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { Cookie myCookie = getCookie(request, "myCookie"); String myCookieValue = ""; if (myCookie != null && !myCookie.getValue().isBlank()) { myCookieValue = myCookie.getValue(); } // server response response.setStatus(200); response.setContentType("application/json"); JSONObject jsonResponse = new JSONObject(); jsonResponse.put("myCookie", myCookieValue); response.getWriter().write(jsonResponse.toString()); } // extracted helper method private Cookie getCookie(HttpServletRequest request, String cookieName) { if (StringUtils.isBlank(cookieName)) { return null; } else { Cookie[] cookies = request.getCookies(); if (cookies == null) { return null; } else { if (cookies.length > 0) { Cookie[] var3 = cookies; int var4 = cookies.length; for(int var5 = 0; var5 < var4; ++var5) { Cookie cookie = var3[var5]; if (StringUtils.equals(cookieName, cookie.getName())) { return cookie; } } } return null; } } } } |
2. Sling Model Get Cookie Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package com.sourcedcode.models.pages.page; import org.apache.commons.lang.StringUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.apache.sling.models.annotations.DefaultInjectionStrategy; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.SlingObject; import javax.annotation.PostConstruct; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @Model( adaptables = {SlingHttpServletRequest.class, Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class ExampleModel { @SlingObject protected SlingHttpServletRequest request; @PostConstruct private void init() { Cookie myCookie = getCookie(request, "myCookie"); String myCookieValue = ""; if (myCookie != null && !myCookie.getValue().isBlank()) { myCookieValue = myCookie.getValue(); } } // extracted helper method private Cookie getCookie(HttpServletRequest request, String cookieName) { if (StringUtils.isBlank(cookieName)) { return null; } else { Cookie[] cookies = request.getCookies(); if (cookies == null) { return null; } else { if (cookies.length > 0) { Cookie[] var3 = cookies; int var4 = cookies.length; for(int var5 = 0; var5 < var4; ++var5) { Cookie cookie = var3[var5]; if (StringUtils.equals(cookieName, cookie.getName())) { return cookie; } } } return null; } } } } |
Hi Brian,
Is possible could you share how the HTL looks like for these 2 example?
Hi there, sorry, I don’t have time to share you HTL code, but how this will work is that if you have a Sightly FE component, which will be rendered apart of the HTML (cached in the dispatcher), I would create JavaScript which will make an aJax call to the AEM servlet, and then use JS to render HTML elements on the page.
Also, another related question. I heard the cookie will be cached in AEM if access it from backend?
It does not get cached if you call it from a servlet. When calling it from a component, and the page is cached, yes thats true. The rendered HTML will be cached apart of the page.