Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

AEM Cloud Service - Case Insensitive URLS for accessing Site pages | AEM Community Blog Seeding

Avatar

Administrator

BlogImage.jpg

AEM Cloud Service - Case Insensitive URLS for accessing Site pages by Sreekanth Choudry Nalabotu

Abstract

Goal
Cloud Service Version 2022.1.6198.20220113T173638Z-211100 (Jan 13, 2022)

Apache mod_speling module can be used to configure Case Insensitivity for URLs on an onPrem AEM instance. This post is for trying the same thing on a Cloud Services AEM...

Add a filter apps.experienceaem.sites.core.filters.CaseInsensitiveURLMatchFilter with the following code. It attempts to look up the page resource by converting the URL to lower case...

package apps.experienceaem.sites.core.filters;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Locale;

@Component(
service = Filter.class,
immediate = true,
name = "Experience AEM Case Insensitive URL Filter",
property = {
Constants.SERVICE_RANKING + ":Integer=-99",
"sling.filter.scope=COMPONENT",
"sling.filter.pattern=(/content/eaem-case-insensitive-urls/.*.html)",
}
)
public class CaseInsensitiveURLMatchFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(CaseInsensitiveURLMatchFilter.class);

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;

try {
String uri = slingRequest.getRequestURI();

if(!uri.endsWith(".html")){
chain.doFilter(request, response);
return;
}

Resource resource = slingRequest.getResource();

if( (resource != null) && !(resource instanceof NonExistingResource)){
chain.doFilter(request, response);
return;
}

ResourceResolver resolver = slingRequest.getResourceResolver();

String resPath = uri.substring(0,uri.lastIndexOf(".html"));
resPath = resPath.toLowerCase();

resource = resolver.getResource(resPath);

if(resource != null){
RequestDispatcher dp = slingRequest.getRequestDispatcher(resPath + ".html");
dp.include(slingRequest, slingResponse);
return;
}

chain.doFilter(request, response);
} catch (Exception e) {
log.error("Error finding resource : " + slingRequest.getRequestURI());
slingResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void destroy() {
}
}

Read Full Blog

AEM Cloud Service - Case Insensitive URLS for accessing Site pages

Q&A

Please use this thread to ask the related questions.

0 Replies