Expand my Community achievements bar.

SOLVED

AEM Custom Servlet Post Working in HTTP but not HTTPs

Avatar

Level 2

*Reposted since I am not able to see this post

 

Hi everyone,

I have a custom servlet which I am using to return folder information. I am able to return the information when I attempting to hit the servlet directly with HTTP and specifying the port number. However, we are setting AEM to be SSL by Default and I am unable to get the same information to be returned through HTTPS and when I do not specify the port which is the case I want. I'm assuming it has to do with the mapping I have in place but I am unsure.

 

I have updated the Apache Felix Jetty Based Http Service to enable HTTPS and messed around with the Sling Mapping but am getting nowhere. I have added error log information and some configuration information below when I attempt to hit the servlet from Postman.

Any help would be awesome.

 

Error Log Information

0 TIMER_START{Request Processing}
      2 COMMENT timer_end format is {<elapsed microseconds>,<timer name>} <optional message>
     12 LOG Method=POST, PathInfo=null
     16 TIMER_START{handleSecurity}
   2016 TIMER_END{1996,handleSecurity} authenticator org.apache.sling.auth.core.impl.SlingAuthenticator@576d3546 returns true
   2298 TIMER_START{ResourceResolution}
   6162 TIMER_END{3862,ResourceResolution} URI=/api/assets/v1/jobFolderInfo resolves to Resource=NonExistingResource, path=/api/assets/v1/jobFolderInfo
   6175 LOG Resource Path Info: SlingRequestPathInfo: path='/api/assets/v1/jobFolderInfo', selectorString='null', extension='null', suffix='null'
   6176 TIMER_START{ServletResolution}
   6182 TIMER_START{resolveServlet(/api/assets/v1/jobFolderInfo)}
   8231 LOG {0}: no servlet found
   8245 TIMER_END{2061,resolveServlet(/api/assets/v1/jobFolderInfo)} Using servlet org.apache.sling.servlets.post.impl.SlingPostServlet
   8251 TIMER_END{2074,ServletResolution} URI=/api/assets/v1/jobFolderInfo handled by Servlet=org.apache.sling.servlets.post.impl.SlingPostServlet
   8259 LOG Applying Requestfilters
   8265 LOG Calling filter: com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl
   8274 LOG Calling filter: org.apache.sling.i18n.impl.I18NFilter

Sling Mapping

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:primaryType="sling:Mapping"
sling:internalRedirect="/content/dam/site.$1.json"
sling:match="aem.site.com.4502/api/assets/v1/(.*)" />

Servlet Information

/**
* Servlet for creating folder using DAM assets APIs.
*/
@Component(service = Servlet.class,
property = {
Constants.SERVICE_DESCRIPTION + "=Get Job Folder Info API",
"sling.servlet.methods=" + HttpConstants.METHOD_POST,
"sling.servlet.resourceTypes=" + "sling/servlet/default",
"sling.servlet.selectors=" + "jobFolderInfo",
"sling.servlet.extensions=" + APIConstants.JSON_EXTENSION_TYPE
})
public class JobFolderInfoServlet extends SlingAllMethodsServlet {

 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hello,

I don't think you can make a sling:internalRedirect with servlets; as this property causes the current path to be modified internally to continue with resource resolution; not script resolution. Documentation: https://sling.apache.org/documentation/the-sling-engine/mappings-for-resource-resolution.html

Intern Solution:
Apache Redirects:

RewriteRule ^/api/assets/v1/(.*)$ /content/dam/site.$1.json [PT,L]

Documentation: https://sourcedcode.com/sugar-coating-servlet-scripts-and-paths

Hope this helps.

View solution in original post

4 Replies

Avatar

Level 2

Just wanted to add more to this in terms of recent request log.

0 TIMER_START{Request Processing}
      3 COMMENT timer_end format is {<elapsed microseconds>,<timer name>} <optional message>
     15 LOG Method=POST, PathInfo=null
     19 TIMER_START{handleSecurity}
   2006 TIMER_END{1985,handleSecurity} authenticator org.apache.sling.auth.core.impl.SlingAuthenticator@66bb9cb returns true
   2326 TIMER_START{ResourceResolution}
   4772 TIMER_END{2444,ResourceResolution} URI=/api/assets/v1/jobFolderInfo resolves to Resource=NonExistingResource, path=/api/assets/v1/jobFolderInfo
   4783 LOG Resource Path Info: SlingRequestPathInfo: path='/api/assets/v1/jobFolderInfo', selectorString='null', extension='null', suffix='null'
   4784 TIMER_START{ServletResolution}
   4789 TIMER_START{resolveServlet(/api/assets/v1/jobFolderInfo)}
   5722 LOG {0}: no servlet found
   5734 TIMER_END{943,resolveServlet(/api/assets/v1/jobFolderInfo)} Using servlet org.apache.sling.servlets.post.impl.SlingPostServlet
   5740 TIMER_END{955,ServletResolution} URI=/api/assets/v1/jobFolderInfo handled by Servlet=org.apache.sling.servlets.post.impl.SlingPostServlet
   5747 LOG Applying Requestfilters
   5753 LOG Calling filter: com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl
   5762 LOG Calling filter: org.apache.sling.i18n.impl.I18NFilter
   5766 LOG Calling filter: com.adobe.granite.httpcache.impl.InnerCacheFilter
   5775 LOG Calling filter: org.apache.sling.rewriter.impl.RewriterFilter
   5780 LOG Calling filter: com.adobe.cq.mcm.campaign.servlets.CampaignCopyTracker
   5784 LOG Calling filter: com.adobe.cq.history.impl.HistoryRequestFilter
   5948 LOG Calling filter: com.day.cq.wcm.core.impl.WCMRequestFilter
   5962 LOG Calling filter: com.adobe.cq.wcm.core.components.internal.servlets.CoreFormHandlingServlet
   5968 LOG Calling filter: com.adobe.granite.optout.impl.OptOutFilter
   5977 LOG Calling filter: com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet
   5980 LOG Calling filter: com.adobe.cq.social.commons.cors.CORSAuthenticationFilter
   5984 LOG Calling filter: org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
   5986 LOG Calling filter: com.day.cq.wcm.mobile.core.impl.redirect.RedirectFilter
   5990 LOG Calling filter: com.day.cq.wcm.core.impl.AuthoringUIModeServiceImpl
   6295 LOG Calling filter: org.apache.sling.security.impl.ContentDispositionFilter
   6300 LOG Calling filter: com.adobe.granite.csrf.impl.CSRFFilter
   6310 LOG Calling filter: com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter
   6314 LOG Calling filter: com.adobe.granite.requests.logging.impl.RequestLoggerImpl
   6320 LOG Calling filter: com.adobe.granite.rest.impl.servlet.ApiResourceFilter
   6366 LOG Including resource ApiResourceWrapper, type=granite/rest/core/resource, path=/api/assets/v1/jobFolderInfo, resource=[NonExistingResource, path=/api/assets/v1/jobFolderInfo] (SlingRequestPathInfo: path='/api/assets/v1/jobFolderInfo', selectorString='null', extension='null', suffix='null')
   6377 TIMER_START{resolveServlet(/api/assets/v1/jobFolderInfo)}
   6398 TIMER_END{20,resolveServlet(/api/assets/v1/jobFolderInfo)} Using servlet com.adobe.granite.rest.impl.servlet.DefaultServlet
   6405 LOG Applying Forwardfilters
   6408 LOG Calling filter: com.day.cq.personalization.impl.TargetComponentFilter
   6412 LOG Calling filter: org.apache.sling.i18n.impl.I18NFilter
   6415 LOG Calling filter: com.day.cq.wcm.core.impl.WCMComponentFilter
   6520 LOG Calling filter: com.day.cq.wcm.core.impl.WCMDebugFilter
   6538 LOG Calling filter: com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter
   6549 TIMER_START{com.adobe.granite.rest.impl.servlet.DefaultServlet#0}
  11773 TIMER_END{5222,com.adobe.granite.rest.impl.servlet.DefaultServlet#0}
  11837 LOG Filter timing: filter=com.day.cq.dam.core.impl.servlet.DamContentDispositionFilter, inner=0, total=5, outer=5
  11842 LOG Filter timing: filter=com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter, inner=5, total=5, outer=0
  11846 LOG Filter timing: filter=com.day.cq.wcm.core.impl.WCMDebugFilter, inner=5, total=5, outer=0
  11849 LOG Filter timing: filter=com.day.cq.wcm.core.impl.WCMComponentFilter, inner=5, total=6, outer=1
  11853 LOG Filter timing: filter=org.apache.sling.i18n.impl.I18NFilter, inner=6, total=6, outer=0
  12003 TIMER_END{12002,Request Processing} Request Processing
  12018 LOG Filter timing: filter=com.adobe.cq.dam.webdav.impl.io.DamWebdavRequestFilter, inner=0, total=0, outer=0
  12021 LOG Filter timing: filter=com.day.cq.wcm.core.impl.warp.TimeWarpFilter, inner=0, total=0, outer=0
  12025 LOG Filter timing: filter=com.adobe.cq.social.ugcbase.security.impl.SaferSlingPostServlet, inner=0, total=0, outer=0
  12028 LOG Filter timing: filter=com.day.cq.dam.core.impl.assetlinkshare.AdhocAssetShareAuthHandler, inner=0, total=0, outer=0
  12031 LOG Filter timing: filter=com.day.cq.dam.core.impl.servlet.ActivityRecordHandler, inner=0, total=0, outer=0
  12034 LOG Filter timing: filter=com.day.cq.dam.core.impl.servlet.DamContentDispositionFilter, inner=0, total=0, outer=0
  12037 LOG Filter timing: filter=com.adobe.granite.rest.impl.servlet.ApiResourceFilter, inner=0, total=6, outer=6
  12040 LOG Filter timing: filter=com.adobe.granite.requests.logging.impl.RequestLoggerImpl, inner=6, total=6, outer=0
  12042 LOG Filter timing: filter=com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter, inner=6, total=6, outer=0
  12045 LOG Filter timing: filter=com.adobe.granite.csrf.impl.CSRFFilter, inner=6, total=6, outer=0
  12048 LOG Filter timing: filter=org.apache.sling.security.impl.ContentDispositionFilter, inner=6, total=6, outer=0
  12051 LOG Filter timing: filter=com.day.cq.wcm.core.impl.AuthoringUIModeServiceImpl, inner=6, total=6, outer=0
  12054 LOG Filter timing: filter=com.day.cq.wcm.mobile.core.impl.redirect.RedirectFilter, inner=6, total=6, outer=0
  12057 LOG Filter timing: filter=org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter, inner=6, total=6, outer=0
  12059 LOG Filter timing: filter=com.adobe.cq.social.commons.cors.CORSAuthenticationFilter, inner=6, total=6, outer=0
  12062 LOG Filter timing: filter=com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet, inner=6, total=6, outer=0
  12065 LOG Filter timing: filter=com.adobe.granite.optout.impl.OptOutFilter, inner=6, total=6, outer=0
  12069 LOG Filter timing: filter=com.adobe.cq.wcm.core.components.internal.servlets.CoreFormHandlingServlet, inner=6, total=6, outer=0
  12072 LOG Filter timing: filter=com.day.cq.wcm.core.impl.WCMRequestFilter, inner=6, total=6, outer=0
  12075 LOG Filter timing: filter=com.adobe.cq.history.impl.HistoryRequestFilter, inner=6, total=6, outer=0
  12078 LOG Filter timing: filter=com.adobe.cq.mcm.campaign.servlets.CampaignCopyTracker, inner=6, total=6, outer=0
  12081 LOG Filter timing: filter=org.apache.sling.rewriter.impl.RewriterFilter, inner=6, total=6, outer=0
  12084 LOG Filter timing: filter=com.adobe.granite.httpcache.impl.InnerCacheFilter, inner=6, total=6, outer=0
  12087 LOG Filter timing: filter=org.apache.sling.i18n.impl.I18NFilter, inner=6, total=6, outer=0
  12091 LOG Filter timing: filter=org.apache.sling.distribution.servlet.DistributionAgentCreationFilter, inner=6, total=6, outer=0

 Looks as if maybe the servlet is found? I am not too sure. 

Avatar

Correct answer by
Community Advisor

Hello,

I don't think you can make a sling:internalRedirect with servlets; as this property causes the current path to be modified internally to continue with resource resolution; not script resolution. Documentation: https://sling.apache.org/documentation/the-sling-engine/mappings-for-resource-resolution.html

Intern Solution:
Apache Redirects:

RewriteRule ^/api/assets/v1/(.*)$ /content/dam/site.$1.json [PT,L]

Documentation: https://sourcedcode.com/sugar-coating-servlet-scripts-and-paths

Hope this helps.

Avatar

Community Advisor

Have you created sling mapping for both htttp and https nodes?

Log says, it is not able to find /api/..... that means mapping is missing.



Arun Patidar

Avatar

Level 2
I am new to AEM and was only able to figure it out after poking around and creating a mapping within a new folder named https which worked for me.