默认情况下,所有 GET 请求都会首先发送到 DefaultGetServlet。基于扩展,它将请求委托给渲染器。现在,如果请求 URI 中没有扩展名,为什么 AEM 会发送 403(禁止)?最多,如果 AEM 无法提供此服务,它可能会发送 BAD REQUEST。即使您以管理员用户身份登录(具有最高级别的授权,如果有帮助的话),AEM 也会发送 403。
例子:
http://localhost:4502/content/geometrixx/en/events
Run Code Online (Sandbox Code Playgroud)
该 URL 将返回 403 响应。而
http://localhost:4502/content/geometrixx/en/events.html
Run Code Online (Sandbox Code Playgroud)
将毫无问题地提供服务。
添加到上面,正如艾哈迈德提到的:使用 URL“ http://localhost:4502/content/geometrixx/en/events ”StreamRendererServlet
将被执行并解析为以结尾的重定向逻辑/
。
// redirect to this with trailing slash to render the index
String url = request.getResourceResolver().map(request,resource.getPath())+ "/";
response.sendRedirect(url);
Run Code Online (Sandbox Code Playgroud)
一旦重定向到“ http://localhost:4502/content/geometrixx/en/events/ ”,同样StreamRendererServlet
解析为目录列表逻辑。
// trailing slash on url means directory listing
if ("/".equals(request.getRequestPathInfo().getSuffix())) {
renderDirectory(request, response, included);
return;
}
Run Code Online (Sandbox Code Playgroud)
在renderDirectory
as索引中将会是 false,
if (index) {
renderIndex(resource, response);
} else {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
}
Run Code Online (Sandbox Code Playgroud)
将发送 403 Forbidden 响应。
您可以通过为“Apache Sling GET Servlet”felix 配置控制台启用“自动索引”来更改此行为。