in core/src/main/java/org/apache/sling/cms/core/internal/servlets/CmsDefaultErrorHandlerServlet.java [211:238]
private int getErrorCode(SlingHttpServletRequest slingRequest, ResourceResolver resolver) {
int errorCode = Optional.ofNullable(slingRequest.getAttribute(SlingConstants.ERROR_STATUS))
.map(val -> Integer.parseInt(val.toString())).orElse(500);
if (errorCode == HttpServletResponse.SC_NOT_FOUND) {
log.debug("Validating the resource does not exist for all users");
ResourceResolver adminResolver = null;
try {
adminResolver = factory.getServiceResourceResolver(
Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, SERVICE_USER_NAME));
Resource pResource = adminResolver.resolve(slingRequest, slingRequest.getResource().getPath());
if (!CMSUtils.isPublished(pResource) || pResource.isResourceType(Resource.RESOURCE_TYPE_NON_EXISTING)) {
errorCode = HttpServletResponse.SC_NOT_FOUND;
} else if (UserConstants.DEFAULT_ANONYMOUS_ID.equals(resolver.getUserID())) {
errorCode = HttpServletResponse.SC_UNAUTHORIZED;
} else {
errorCode = HttpServletResponse.SC_FORBIDDEN;
}
} catch (LoginException e) {
log.error("Exception retrieving service user", e);
} finally {
if (adminResolver != null) {
adminResolver.close();
}
}
}
return errorCode;
}