Quantcast
Viewing all articles
Browse latest Browse all 35

[COMPONENT] CQ filter

Sling Request Invocation Chain

Image may be NSFW.
Clik here to view.
 
 

Implementing Sling Filters

Registration of Filters

  1. Standard Servlet Filter (javax.servlet.Filter)
    1. Need to be registered as Service („manually“ or SlingFilter SCR Annotation)
  2. Order and FilterScopes can be defined
  3. Order defined by Serviceranking
  4. Filterscopes
    1. REQUEST
    2. COMPONENT
    3. ERROR
    4. INCLUDE *
    5. FORWARD *


* FilterChain executes COMPONENT scope for these scopes as well.

SCR Annotation

@SlingFilter(scope = SlingFilterScope.COMPONENT, order = -10000, metatype = false)
public class MyComponentFilter implements javax.servlet.Filter {
@Override
public void doFilter(ServletRequest pRequest, ServletResponse pResponse,
FilterChain pChain) throws IOException, ServletException {

// Implement Filter
// continue with filter chaining
pChain.doFilter(pRequest, pResponse);
}
}


Filter Order

Existing Filters might use the deprecated “filter.order” instead “service.ranking”.
Existing Filters and their execution ORDER can be inspected via http://<instance>:<port>/system/console/status-slingfilter


Check Filterconditions at first place


public void doFilter(ServletRequest pRequest, ServletResponse pResponse,
FilterChain pChain) throws IOException, ServletException {
if (!(pRequest instanceof SlingHttpServletRequest)) {
throw new ServletException("Request is not a Sling HTTP request.");
}
if (isFilterEnabled(slingRequest)) {
// Implement Filter-Logic
} else {
// continue with filter chaining
pChain.doFilter(pRequest, pResponse);
}
}


Check available Information from slingRequest if Filter should do anything.
Be aware that these checks may be performed a lot especially for COMPONENT scope
Accessing and Using Data in Filter


if (isFilterEnabled(slingRequest)) {
if (isFilterEnabled(slingRequest)) {
Resource resource = slingRequest.getResource(); // already resolved
if (null != resource) {
PrintWriter writer = pResponse.getWriter();
writer.write("<component resourceType=\"" + resource.getResourceType() + "\">");
pChain.doFilter(pRequest, pResponse);
writer.write("</component>");
return;
}
}
}


Viewing all articles
Browse latest Browse all 35

Trending Articles