활동이 없어 이 대화는 잠겼습니다. 새 게시물을 작성해 주세요.
활동이 없어 이 대화는 잠겼습니다. 새 게시물을 작성해 주세요.
All,
I have a use case where I need to implement a custom feature in asset share search page.
Use case : I need to apply search filtering at page loading, if I have a suffix in the URL, for example : en/mediacenter.html/Image/Rolex => filter assets with a tag : Rolex.
The solution I figured out, is to implement a Sling servlet filter, to intercept the request, if I have the suffix then I create a predicate and call the search model otherwise do nothing and proceed with normal processing.
I have two questions :
Here is my code snippet :
@component
@SlingServletFilter(
scope = {SlingServletFilterScope.REQUEST},
resourceTypes = {BrandFilterServlet.RESOURCE_TYPE},
pattern = "content/assetshare/.*",
extensions = {"html"},
methods = {"GET"})
public class BrandFilterServlet implements Filter {
public static final String RESOURCE_TYPE = "asset-share-commons/components/structure/search-page";
private static final Logger log = LoggerFactory.getLogger(RequestLogger.class.getName());
Any help please ?
해결되었습니다! 솔루션으로 이동.
조회 수
답글
좋아요 수
May be you should use the DS annotions for this
@Component(service = javax.servlet.Filter.class, name ="Sample Filter", configurationPid = "org.foo.core.filters.SampleFilter", property = { "process.label= Sample Filter", EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, "pattern='/content/foo/en/'", "resourceTypes=" + SampleFilter.RESOURCE_TYPE, Constants.SERVICE_RANKING+ ":Integer=0"})
When I used these annotations the calls started working.
Hope this helps.
Thanks
Abinaya M
Hi @Karim_Onizuka ,
yes, for your use case sling servlet filter is better option and go through the below url for latest annotation to create filter.
https://sling.apache.org/documentation/the-sling-engine/filters.html
Regards,
Sanjay
Hello @Sanjay_Bangar
Thank you for your replay, I used that link to create the code snipet above
May be you should use the DS annotions for this
@Component(service = javax.servlet.Filter.class, name ="Sample Filter", configurationPid = "org.foo.core.filters.SampleFilter", property = { "process.label= Sample Filter", EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, "pattern='/content/foo/en/'", "resourceTypes=" + SampleFilter.RESOURCE_TYPE, Constants.SERVICE_RANKING+ ":Integer=0"})
When I used these annotations the calls started working.
Hope this helps.
Thanks
Abinaya M
Hi @Karim_Onizuka,
Can you try with just the scope and pattern first and then we can refine with other properties.
In the snippet that you have shared, "/" is missing before content, not sure if its a typo while adding the code here.
Use the below snippet as is in your local instance and execute any we-retail site page. If it works, use your path pattern first then followed by other properties based on your requirement one by one. (so that we can narrow down accordingly)
package com.aem.demoproject.core.filters; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.engine.EngineConstants; import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.*; import java.io.IOException; @Component(service = Filter.class, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, "sling.filter.pattern=" + "/content/we-retail/.*" }) public class DemoFilter implements Filter { private final Logger logger = LoggerFactory.getLogger(DemoFilter.class); @Override public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain filterChain) throws IOException, ServletException { final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request; logger.info("request for {}, with selector {} and suffix={} ", slingRequest .getRequestPathInfo().getResourcePath(), slingRequest .getRequestPathInfo().getSelectorString(), slingRequest.getRequestPathInfo().getSuffix()); filterChain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) { } @Override public void destroy() { } }