I have a requirement where if we hit for 'X' asset it has to redirect to 'Y' asset.
How to implement this redirection in AEM.
Solved! Go to Solution.
Views
Replies
Total Likes
@Leela-Pavan-Kumar, in that case you can use one of below solutions:
package com.example.filters; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.engine.EngineConstants; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import javax.servlet.*; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Component(service = Filter.class, immediate = true, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, EngineConstants.SLING_FILTER_METHODS + "=" + HttpConstants.METHOD_GET, Constants.SERVICE_RANKING + "=" + Integer.MAX_VALUE }) public class RedirectFilter implements Filter { private Map<String, String> redirectMap = new HashMap<String, String>(); @Override public void init(FilterConfig filterConfig) throws ServletException { redirectMap.put("/document/adobe.pdf", "/content/dam/wknd/en/adobefile.pdf"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) servletRequest; SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) servletResponse; String path = slingRequest.getRequestPathInfo().getResourcePath(); if (redirectMap.containsKey(slingRequest.getRequestPathInfo().getResourcePath())) { slingResponse.sendRedirect(redirectMap.get(path)); return; } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }
You can achieve this using Redirect Manager from ACS Commons:
I did a quick test on AEM 6.5.13 and ACS Commons 5.3.2, and it worked.
This is how my test configuration looks like:
So when I hit:
as a result I am getting:
Tired this one @lukasz-m , but here the source needs to be there in our DAM Assets.
In our case Asset is not present in our DAM.
if we hit
localhost:4503/document/adobe.pdf
it has to take me to
localhost:4503/content/dam/wknd/en/adobefile.pdf
@Leela-Pavan-Kumar, in that case you can use one of below solutions:
package com.example.filters; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.engine.EngineConstants; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import javax.servlet.*; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Component(service = Filter.class, immediate = true, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, EngineConstants.SLING_FILTER_METHODS + "=" + HttpConstants.METHOD_GET, Constants.SERVICE_RANKING + "=" + Integer.MAX_VALUE }) public class RedirectFilter implements Filter { private Map<String, String> redirectMap = new HashMap<String, String>(); @Override public void init(FilterConfig filterConfig) throws ServletException { redirectMap.put("/document/adobe.pdf", "/content/dam/wknd/en/adobefile.pdf"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) servletRequest; SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) servletResponse; String path = slingRequest.getRequestPathInfo().getResourcePath(); if (redirectMap.containsKey(slingRequest.getRequestPathInfo().getResourcePath())) { slingResponse.sendRedirect(redirectMap.get(path)); return; } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }
Views
Likes
Replies