Issue

How do I check if the code is running on an author or a publish instance?

Solution

The best way to check if your code is running in the authoring environment in CQ is as follows.
DeliveryHttpServletRequest cqRequest = (DeliveryHttpServletRequest) request;

// flag to indicate whether application is Author or Publish
boolean isAdmin = !cqRequest.getCmsService().getDisplayControlSet(cqRequest).equals(DisplayControlSet.SHOW);

// flag to indicate whether application is in preview/show mode
boolean isShowMode = (cqRequest.getCmsService().getDisplayControlSet(cqRequest).equals(DisplayControlSet.SHOWMODE)
|| "ShowMode".equals(cqRequest.getParameter("Show")) );

This method is better than checking the URL, because this code does nor rely on a specific context, which can change. Also, the author server can be switched to a publish mode by setting parameter "Show" to 1 in the request. So, the request to /author/somepage.html?Show=1 renders as publish. Therefore, relying on the context is not a reliable solution.

Za ta izdelek je bila izdana neprenosljiva licenca za priznanje avtorstva, nekomercialno uporabo in skupno rabo pod enakimi pogoji 3.0  Objav v storitvah Twitter™ in Facebook ne urejajo pogoji pogodbe Creative Commons.

Pravna obvestila   |   Pravilnik o zasebnosti v spletu