Abstract
Filters in Adobe Experience Manager (AEM) are a powerful feature that allows developers to intercept and manipulate requests before they are handled by the AEM application. They can be used to perform tasks such as caching, compression, authentication, and more. Filters in AEM are implemented as a chain of OSGi services, which are executed in a specific order. Developers can create custom filters by implementing the javax.servlet.Filter interface and configuring them through the OSGi framework. In addition, AEM provides a set of built-in filters for common tasks, such as the CacheFilter for caching responses, the GZipFilter for compressing responses, and the SlingAuthenticator for handling authentication. Filters in AEM are powerful tools that can be used to improve the performance of an AEM application and enhance the user experience.
In AEM, there are several types of filters that can be used, including:
Sling Filters: These filters are executed by the Sling Servlet and are used to modify the request and response, such as for authentication, caching, or logging. For example, a Sling filter can be used to add a header to the response or to check if the user is logged in before allowing them to access a specific resource. Sling filters are configured in the Sling Filter Manager, which allows you to apply them to specific paths or servlets.
Use case: A Sling filter can be used to cache the response of a certain path to improve the performance of the website.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(service = Filter.class, property = {
Constants.SERVICE_DESCRIPTION + "=Cache Filter",
"sling.filter.scope=request",
"sling.filter.pattern=/content/mypage"
})
public class CacheFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(CacheFilter.class);
private static final int CACHE_TIME = 3600; // one hour
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "public, max-age=" + CACHE_TIME);
httpResponse.setDateHeader("Expires", System.currentTimeMillis() + CACHE_TIME * 1000);
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
Read Full Blog
Q&A
Please use this thread to ask the related questions.
Kautuk Sahni