为什么AEM对没有扩展的请求返回403?
默认情况下,所有GET请求首先转到DefaultGetServlet。基于扩展,它将请求委托给渲染器。现在,如果请求URI中没有扩展,为什么AEM发送403(禁止)?最多,如果AEM无法提供此服务,它可能会发送错误的请求。即使您以管理员用户身份登录,AEM也会发送403(如果有帮助的话,它具有最高级别的授权) 例如:为什么AEM对没有扩展的请求返回403?,aem,sling,Aem,Sling,默认情况下,所有GET请求首先转到DefaultGetServlet。基于扩展,它将请求委托给渲染器。现在,如果请求URI中没有扩展,为什么AEM发送403(禁止)?最多,如果AEM无法提供此服务,它可能会发送错误的请求。即使您以管理员用户身份登录,AEM也会发送403(如果有帮助的话,它具有最高级别的授权) 例如: http://localhost:4502/content/geometrixx/en/events 此URL将以403响应。鉴于 http://localhost:4502/c
http://localhost:4502/content/geometrixx/en/events
此URL将以403响应。鉴于
http://localhost:4502/content/geometrixx/en/events.html
将不会出现任何问题。自2009年关闭的吊索票起,如果未找到任何渲染器,则返回状态代码应为404
您可以在doGet
方法中的DefaultGetServlet.java
的源代码中看到这一点
以下内容在AEM 6.3中进行了测试,但在6.0中应相同+
例如,如果您尝试访问,您将得到一个404,sling进度跟踪器将记录没有扩展部分的渲染器
现在,请允许我重新表述您的问题,为什么extension=null
返回403?
如果查看sling progress tracker响应,您可能会注意到以下日志:
使用org.apache.sling.servlets.get.impl.helpers.StreamRenderServlet为extension=null呈现
这意味着对于null
扩展,Sling将使用StreamRenderServlet
()尝试并呈现资源。在代码中的某个地方,或者可能是后面应用的过滤器导致您看到的403响应代码。您必须自己调试该程序,并找出返回403的确切位置。补充说明:
在没有扩展名的情况下,Sling假定您正在尝试列出该目录路径的内容,并在该路径下查找索引文件。当它找不到该索引文件时,会抛出禁止的错误
如果您在事件
节点下添加一个索引文件,并尝试请求相同的无扩展url,它将为该索引文件提供服务。
也就是说,当您在/content/geometricxx/en/events
下添加索引文件(index.html
)时,
所有对http://localhost:4502/content/geometrixx/en/events
或http://localhost:4502/content/geometrixx/en/events/index.html
将返回相同的结果。添加到上述内容,如Ahmed所述:
使用URL“StreamRenderServlet
将执行并解析为以/
结尾
// redirect to this with trailing slash to render the index
String url = request.getResourceResolver().map(request,resource.getPath())+ "/";
response.sendRedirect(url);
一旦重定向到“”
相同的StreamRenderServlet
解析为
在renderDirectory
as中
将发送403禁止响应
您可以通过为“Apache Sling GET Servlet”felix配置控制台启用“自动索引”来更改此行为。在“事件”节点下使用“Index.html”对我不起作用。获取了403错误响应,其中包含一些线索,0日志资源路径信息:SlingRequestPathInfo:Path='/content/geometrixx/en/events',selectorString='null',extension='null',suffix='/'
后缀“/”应该在执行某些操作。
// trailing slash on url means directory listing
if ("/".equals(request.getRequestPathInfo().getSuffix())) {
renderDirectory(request, response, included);
return;
}
if (index) {
renderIndex(resource, response);
} else {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
}