我试图使我的域下不存在的网页去404页。我需要区分404页和其他页。但是,我不知道怎么做。下面的东西不起作用。
@Component(service = Filter.class,
property = {
"service.ranking=" + Integer.MIN_VALUE})
@SlingServletFilter(scope = {SlingServletFilterScope.REQUEST},
pattern = "/content/foo/.*",
resourceTypes = "cq:Page",
extensions = {"html"},
methods = {"GET"})
public class NotFoundFilter implements Filter {
private static final String DEFAULT_METHOD = "GET";
@Reference
private UrlOperationsManager urlOperationsManager;
@Reference
private RequestResponseFactory requestResponseFactory;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (!(request instanceof SlingHttpServletRequest) ||
!(response instanceof SlingHttpServletResponse)) {
chain.doFilter(request, response);
return;
}
SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;
//this condition here is not working since slingResponse has no getStatusCode method.
if(slingResponse.getStatusCode() == 404) {
//do something
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
1条答案
按热度按时间juzqafwq1#
您可以通过实现自己的
HttpServletResponseWrapper
保存值并稍后访问。sling实现与一般的servlet api略有不同(至少就这个特定的机制而言),在如何从servletfilter中的servletresponse中获取http状态代码一节中有详细介绍?但是,如果您的意图是为给定的状态代码提供特定的错误文档,那么我会采用不同的方法。假设您使用一个调度器,您可以让web服务器来处理它。
正式的aem项目原型附带了几个简单的示例,如果您使用apache,就可以启用这些示例。细节将取决于您的网站结构,但要点是,它可以提供一个类似的配置使用
ErrorDocument
指令指向相对于文档根目录的缓存错误页,通常使其使用内容可编辑的错误页。有些错误,特别是HTTP5**系列可能会有点棘手,因为它们通常发生在aem本身出现问题时,因此谨慎地确保始终提供完全静态的版本。