【问题标题】:RuntimeException leads to 200 OK statusRuntimeException 导致 200 OK 状态
【发布时间】:2019-10-03 07:40:58
【问题描述】:

我拥有:AEM 6.4 实例。如果我的代码中某处出现 RuntimeExcepption 错误,我的页面将返回 200 OK 状态。 为了解决这个问题,我尝试做Filter。

@SlingFilter( order = Integer.MIN_VALUE, scope = SlingFilterScope.REQUEST)
public class RuntimeExceptionFilter implements javax.servlet.Filter {

    @Override
    public final void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;

        try {
            chain.doFilter(request, response);
        } catch (RuntimeException ex) {
            slingResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }
}

现在我可以捕获请求,这会导致 RuntimeException,但是 slingResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

返回“java.lang.IllegalStateException:响应已提交”。可能是什么原因?或者如果发生 RuntimeException,可以通过其他方式使页面返回 500 状态?

堆栈跟踪:

Caused by: java.lang.IllegalStateException: Response has already been committed
    at org.apache.sling.engine.impl.SlingHttpServletResponseImpl.checkCommitted(SlingHttpServletResponseImpl.java:424) [org.apache.sling.engine:2.6.16]
    at org.apache.sling.engine.impl.SlingHttpServletResponseImpl.sendError(SlingHttpServletResponseImpl.java:170) [org.apache.sling.engine:2.6.16]
    at org.apache.sling.engine.impl.SlingHttpServletResponseImpl.sendError(SlingHttpServletResponseImpl.java:165) [org.apache.sling.engine:2.6.16]
    at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:127) [org.apache.felix.http.servlet-api:1.1.2]
    at my.project.RuntimeExceptionFilter.doFilter(RuntimeExceptionFilter.java:49)

【问题讨论】:

    标签: java servlets filter sling aem-6


    【解决方案1】:

    正如异常文本所说,在引发异常之前已经发送了响应。这里讨论了类似的问题:Response has aready been committed

    首先尝试找出返回的 HTTP 响应的确切时间。一旦你发现你可以解决它。

    我对 AEM 内部不是很熟悉(对它的实践经验很少),但很可能有一些包装器(可能是 Aspect)在某个时候被触发并返回 200 的 HTTP 响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2019-12-15
      • 2016-02-08
      相关资源
      最近更新 更多