【问题标题】:AEM - Servlet resource cannot be foundAEM - 找不到 Servlet 资源
【发布时间】:2020-06-29 15:31:21
【问题描述】:

我是 AEM 新手,我一直在尝试连接到我安装在新 AEM 实例上的 AEM 项目包中的 servlet。

似乎找不到 servlet 或找不到 servlet 的路径,并仔细检查了映射,但我找不到其他可以查看的内容。任何帮助将不胜感激!

吊索映射

<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/test.$1.json"
sling:match="aem.test.com.4545/api/assets/v1/(.*)"/>

Servlet 信息

`@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 {`

来自请求的错误日志

0 TIMER_START{请求处理}

1 COMMENT timer_end 格式为 {,}

6 LOG 方法=POST,PathInfo=null

7 TIMER_START{handleSecurity}

1645 TIMER_END{1636,handleSecurity} 身份验证器 org.apache.sling.auth.core.impl.SlingAuthenticator@5f62558d 返回 true

1876 TIMER_START{ResourceResolution}

3112 TIMER_END{1234,ResourceResolution} URI=/api/assets/v1/jobFolderInfo 解析为 Resource=NonExistingResource, path=/apps/content/dam/test.jobFolderInfo.json

3119 LOG 资源路径信息:SlingRequestPathInfo: path='/apps/content/dam/test.jobFolderInfo.json', selectorString='jobFolderInfo', extension='json', suffix='null'

3119 TIMER_START{ServletResolution}

3122 TIMER_START{resolveServlet(/apps/content/dam/test.jobFolderInfo.json)}

3853 TIMER_END{730,resolveServlet(/apps/content/dam/test.jobFolderInfo.json)} 使用 servlet com.test.assets.api.servlets.JobFolderInfoServlet

3856 TIMER_END{736,ServletResolution} URI=/api/assets/v1/jobFolderInfo 由 Servlet=com.test.assets.api.servlets.JobFolderInfoServlet 处理

3860 LOG 应用请求过滤器

3864 LOG 调用过滤器:com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl

【问题讨论】:

    标签: servlets sling aem-6


    【解决方案1】:

    建议在 resourceType 而不是在路径上注册 servlet,以便能够限制对 servlet 的访问。

    https://helpx.adobe.com/experience-manager/using/resourcetypes.html

    SlingServlet(methods = {"GET"},
    metatype = true,
    resourceTypes = {"services/powerproxy"},
    selectors = {"groups"})
    public class HandleClaim extends org.apache.sling.api.servlets.SlingAllMethodsServlet 
    

    【讨论】:

      【解决方案2】:

      如果我的理解是正确的,那么您正在尝试使用浏览器中的 localhost:4502/bin/your-servlet-path 之类的 url 连接到 servlet。如果是这种情况,则使用路径注册 servlet。在上面的 servlet 代码中,您已使用资源类型注册。

      要使用路径注册,请使用sling.servlet.paths=/bin/your-servlet-path

      Here 是一个链接,可以帮助您更好地了解注册 servlet。

      希望对你有帮助!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        • 2016-04-03
        • 1970-01-01
        • 2021-06-02
        • 2015-01-28
        • 2023-03-16
        • 1970-01-01
        相关资源
        最近更新 更多