Hi there,
I was wondering what best practice would be to bind a servlet to a custom path based on a config. This servlet is an API endpoint, so selectors won't help us too much. For example, I have a servlet at /bin/foo/files, and I'd like to be able to configure that path to be at /bin/bar/files, or even /bar/files, based on an OSGi config or something similar with the path inside.
Solved! Go to Solution.
Views
Replies
Total Likes
The best way is still to avoid hardcoding the path in a servlet. I would suggest another approach:
Then you can create, remove, update, duplicate, ... this API endpoint during runtime. You can define ACLs on it (if you require the users of this API to authenticate). You don't need to reconfigure anything on OSGI level.
And you can even create a new "content tree" below /endpoints (who says, that pages can only reside below /content?)
Views
Replies
Total Likes
I don't think there's an out of a box way to dynamically set the path of your servlet, however, a solution you can try is to utilise and configure Apache rewrite rules for your use case, PT flag. Have a look at this article, which explains the solution more in detail.
https://sourcedcode.com/sugar-coating-servlet-scripts-and-paths
Example:
RewriteRule ^/api/files$ /bin/bar/files [PT,L]
With the example above, when you visit https://my-site/api/files, you will be internally passed through to serve the servlet that has been registered.
Views
Replies
Total Likes
Views
Replies
Total Likes
Views
Replies
Total Likes
Views
Replies
Total Likes
Views
Replies
Total Likes
@candersen_hoodoo
You can try getting it from the query param in servlet as request parameter and then assign it to some servlet's varialble locally.
Then while defining the path for the servlet in Java, get this values as <Classname>.<vriableName>
String path;
path = request.getParameter("path");
"sling.servlet.paths="+<ClassName>.<path>
Why dont you use AEM servlet as proxy servlet and use selector?
Views
Replies
Total Likes
The best way is still to avoid hardcoding the path in a servlet. I would suggest another approach:
Then you can create, remove, update, duplicate, ... this API endpoint during runtime. You can define ACLs on it (if you require the users of this API to authenticate). You don't need to reconfigure anything on OSGI level.
And you can even create a new "content tree" below /endpoints (who says, that pages can only reside below /content?)
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies