intercepting the page request in AEM-6.4 | Community
Skip to main content
Level 4
July 15, 2019

intercepting the page request in AEM-6.4

  • July 15, 2019
  • 1 reply
  • 9660 views
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

1 reply

joerghoh
Adobe Employee
Adobe Employee
July 16, 2019

What do you mean with "intercept"? You can register a request filter (standard servlet API) and then filter according to all your requirements.

Or are you looking for something different?

Jörg

Level 4
July 16, 2019

Dear Joerg,

Thanks for your help.

Actually My requirement is below.

Intercept HTTP request from thirdparty  (endpoint is abc-services/jax-rs/participant-service/secure/participant/search) to AEM 

Level 4
July 23, 2019

You are hitting a non-existing resource (the resource "/Location1/SunitaFirst" does not exist). But if you have requested "/content/trainingproject/Plan/PlanA" and got redirected here, your filter is working.


Hi Joerg,

thanks for your help. Sorry for late reply. Now redirect is working fine.

But now , When I am running my page with the selectors , it is working fine , as shown below.

When I am not giving selectors then my page is not working fine , as shown below.

My code is below. Am I missing something "or" this is the expected behavior that in author it will not work and in publisher it will work.

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 org.apache.felix.scr.annotations.sling.SlingFilter;
import org.apache.felix.scr.annotations.sling.SlingFilterScope;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;

// http://localhost:4502/system/console/status-slingfilter
//  http://localhost:4502/content/workplace/vignettemigrationcontent/plan/plan-104105/location-9999/FirstVignetteContent.104105.9999.html
// http://localhost:4502/content/workplace/vignettemigrationcontent/plan/plan-104139/location-0101/SecondVignetteContent.104139.0101.html

@SlingFilter(order = -701, scope = SlingFilterScope.REQUEST)

public class PlanLocationURLParamsFilter implements Filter {

Logger log = LoggerFactory.getLogger(this.getClass());
String planIDinJCR1 = "104105";
String locationIDinJCR1 = "9999";
String planIDinJCR2 = "104139";
String locationIDinJCR2 = "0101";
String[] arrSplit;
int i;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
  // Usually, do nothing
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
   throws IOException, ServletException {
  if (!(request instanceof SlingHttpServletRequest) || !(response instanceof SlingHttpServletResponse)) {
   // Proceed with the rest of the Filter chain
   chain.doFilter(request, response);
   return;
  }

  final SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;
  final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
  log.info("request for {}, with selector {}", slingRequest.getRequestPathInfo().getResourcePath(),
    slingRequest.getRequestPathInfo().getSelectorString());
  String multiselector = slingRequest.getRequestPathInfo().getSelectorString();
  log.info("MULTISELECTOR is ----------- ====**** " + multiselector);
  final Resource resource = slingRequest.getResource();
  log.info("resource is ----------- ====**** " + resource);

  if (resource.getPath().startsWith("/content/workplace/vignettemigrationcontent/plan")) {

   PageManager pageManager = resource.getResourceResolver().adaptTo(PageManager.class);
   Page page = pageManager.getPage(resource.getPath());
   String templatePath = page.getContentResource().getValueMap().get("cq:template").toString();
   if (templatePath.equals("/apps/workplace-fdi/templates/migrationtemplateHTL")) {
    arrSplit = multiselector.split(" ");
    for (i = 0; i < arrSplit.length; i++) {
     log.info("multiselector INSIDE FOR STATEMENT is ====**** " + arrSplit[i]);
    }
    slingResponse.setHeader("Content-Type", "text/html");
    if (multiselector.contains(planIDinJCR1)) {
     // log.info("multiselector is ----------- ====**** " + planIDinJCR1 );
     slingResponse.getWriter().println("<h1>PlanID is " + planIDinJCR1 + "</h1>");
    }
    if (multiselector.contains(planIDinJCR2)) {
     slingResponse.getWriter().println("<h1>PlanID is " + planIDinJCR2 + "</h1>");
    }
    if (multiselector.contains(locationIDinJCR1)) {
     slingResponse.getWriter().println("<h1>LocationID is " + locationIDinJCR1 + "</h1>");
    }

    if (multiselector.contains(locationIDinJCR2)) {
     slingResponse.getWriter().println("<h1>LocationID is " + locationIDinJCR2 + "</h1>");
    }   
    return;
   }
  }
  chain.doFilter(request, response);
}

@Override
public void destroy() {
  // Usually, do Nothing
}

}

Please suggest.