【问题标题】:JRebel: javax.servlet.ServletException: javax.servlet.ServletException: Filtered request failedJRebel:javax.servlet.ServletException:javax.servlet.ServletException:过滤请求失败
【发布时间】:2026-01-04 23:45:01
【问题描述】:

想法:2018.3 码头:9.4.11

我按照我的 IDEA 中给出的说明下载了 jrebel 文件夹

在调试模式下运行 Jetty 服务器时出现以下错误。

HTTP ERROR 500
Problem accessing /. Reason:

    Server Error
Caused by:
javax.servlet.ServletException: javax.servlet.ServletException: Filtered request failed.
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:531)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.servlet.ServletException: Filtered request failed.
    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:384)
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.__doHandle(ContextHandler.java:1317)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:42020)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    ... 10 more
Caused by: java.lang.*Error
    at org.eclipse.jetty.server.Dispatcher$ForwardAttributes.getAttribute(Dispatcher.java:300)

【问题讨论】:

  • 这是完整的堆栈跟踪还是更多?也许您可以查看堆栈跟踪中是否有任何重复出现的元素。
  • @Tiit 有这么多。 * 限制帖子中的 30 K 个字符。我刚刚通过电子邮件向 support@zeroturnaround.com 和“Alexander Bolcon”发送了有关此问题的电子邮件,并附上了 jrebel.log 的附件。如果您需要更多详细信息,请在那里回复我。一旦解决,我将在此处发布最终解决方案。
  • @Tiit: org.eclipse.jetty.server.Dispatcher$ForwardAttributes.getAttribute(Dispatcher.java:300) 是堆栈跟踪中的重复元素。 Jetty 9.x 的 JRebel 有什么问题吗?

标签: java servlets intellij-idea jetty jrebel


【解决方案1】:

您的代码中存在导致转发和/或重定向循环的错误。

正如上面问题 #2399 中所指出的,您可以添加一个过滤器来记录您的转发行为,以查看您的代码中实际发生的情况。

这将帮助您诊断转发循环的来源。

public static class SimpleFilter implements Filter
{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException { }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
    {
        HttpServletRequest  request;
        HttpServletResponse response;

        if (!(req instanceof HttpServletRequest &&
                res instanceof HttpServletResponse)) {
            throw new ServletException("non-HTTP request or response");
        }

        request = (HttpServletRequest) req;
        response = (HttpServletResponse) res;

        System.out.printf("%s.doFilter() - dispatch:%s uri:%s filterchain:%s%n", this.getClass().getSimpleName(), request.getDispatcherType(), request.getRequestURI(), chain);
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() { }
}

【讨论】:

  • 嗨。感谢您的答复。如果我不使用 JRebel,我不会遇到这个问题。只有当我使用 JRebel 时,我才会遇到这个问题。您能否让我知道重定向循环的可能性在哪里,并建议检测它的最佳方法是什么?
  • 在这一点上,我能提供的唯一建议是,如果 JRebel 会导致您出现问题,请不要使用它。
  • 如果问题只发生在 JRebel 存在的情况下,则重现问题,然后压缩并将 jrebel.log 从您的 ${USER_HOME}/.jrebel/ 目录发送到 support@zeroturnaround.com。确保还包括该 *Error 的完整堆栈跟踪。