We have a sling filter to read some page properties. We have registered with the pattern. It all works great in local AEM instance but as soon as we deploy the code to our environments (DEV, QA, PROD), the filter is not even getting called.
@component
@SlingServletFilter(
scope = {SlingServletFilterScope.REQUEST},
pattern = "/content/myapp/.*",
extensions = "html"
)
In the local instance, the URL is "/content/myapp/us/en/home/test.html". But in the environment, the URL is "myapp.com/test" which is handled through Dispatcher.
Is there anything I am missing here?
Just FYI, we are on AMS.
Thank you!
Views
Replies
Total Likes
I believe the content might be cached in the DEV, QA, and PROD dispatchers. I would recommend to try again after clearing the dispatcher cache, specifically for the /content/myapp.
Hi @Mahedi_Sabuj,
Thanks for responding.
Even after removing the extension, it's still not working when pages are fetched from the publisher through the dispatcher. I have added the log and seems like it's working in the author instance though.
Please clear the dispatcher cache and try again.
In the author environment, it works because pages are not cached.
After clearing the dispatcher cache, the filter will be triggered only the first time you open any page. If you reload the page, the filter will not be triggered again.
If the requirement is to trigger the filter each time a page is browsed, ensure that the page is not cached in the dispatcher.
Hi @Mahedi_Sabuj,
Yes, I cleared the dispatcher cache as well but no luck. I would debug further if the filter gets called but I have LOG.info in the very first line of the doFilter method and not seeing it logged. In the Author instance, I can see the message printing in the log file.
@webdev91 Did you find the suggestions from users helpful? Please let us know if more information is required. Otherwise, please mark the answer as correct for posterity. If you have found out solution yourself, please share it with the community.
Views
Replies
Total Likes
Hi @kautuk_sahni,
I am still looking for the answer.
The issue is likely due to the difference in URL patterns between your local AEM instance and the production environment. In your local instance, you're using the pattern /content/myapp/.*
, which matches the full URL /content/myapp/us/en/home/test.html
. However, in the production environment, the Dispatcher is rewriting the URL to myapp.com/test
, which doesn't match your filter pattern.
To address this, you need to modify your filter pattern to match the rewritten URLs. Since the Dispatcher is removing the /content/myapp/
prefix, you can adjust your pattern to simply match the remaining part of the URL, which is .*
. This will ensure that your filter is called for all requests to your application, regardless of the Dispatcher's rewriting.
Here's the updated filter configuration:
@component
@SlingServletFilter(
scope = {SlingServletFilterScope.REQUEST},
pattern = ".*",
extensions = "html"
)
With this updated pattern, your filter should be invoked for all requests to your application, even after being rewritten by the Dispatcher.
Views
Replies
Total Likes
@webdev91 did the answer from us help you?
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies