This conversation has been locked due to inactivity. Please create a new post.
This conversation has been locked due to inactivity. Please create a new post.
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
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies