【问题标题】:Jetty 9.3.5 ProxyServlet RewriteTarget Method and !asyncSupportedJetty 9.3.5 ProxyServlet RewriteTarget 方法和 !asyncSupported
【发布时间】:2015-12-04 17:42:09
【问题描述】:

我正在使用 Jetty 9.3.5 版来创建 ProxyServlet。

为此,我正在扩展我的课程

org.eclipse.jetty.proxy.ProxyServlet;

与以前的版本不同,我没有得到方法 protected URI rewriteURI(HttpServletRequest request) 来覆盖。阅读 grepcode 后,我看到如下内容并使用它:

@Override
protected String rewriteTarget(HttpServletRequest request) {
    if (!validateDestination(request.getServerName(), request.getServerPort()))
        return null;

    String roleAlias = (String)request.getSession().getAttribute(ATTR_PROXY_ROLE_ALIAS);        

    String uri =request.getRequestURI();
    String aliasedURI = getAliasedURI(request.getMethod(), uri, roleAlias);

    return aliasedURI ;
}

我不知道这是否是正确的覆盖方法。

在 web.xml 我有几个过滤器和这个 servlet 定义。对于 Servlet,我这样定义:

<servlet>
    <servlet-name>Proxy</servlet-name>
    <servlet-class>com.company.MyProxyServlet</servlet-class>
    <async-supported>true</async-supported>
</servlet>

<servlet-mapping>
    <servlet-name>Proxy</servlet-name>
    <url-pattern>/proxy/*</url-pattern>
</servlet-mapping>

但我得到以下异常?任何的想法?我需要对过滤器做同样的事情吗?那怎么办?还是缺少什​​么?

java.lang.IllegalStateException: !asyncSupported
            at org.eclipse.jetty.server.Request.startAsync(Request.java:2224)
            at org.eclipse.jetty.proxy.ProxyServlet.service(ProxyServlet.java:80)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
            at com.company.MyProxyServlet.service(MyProxyServlet.java:66)
            at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685)
            at com.netiq.sentinel.elasticsearch.proxy.AuditFilter.doFilter(AuditFilter.java:104)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668)
            at com.netiq.sentinel.elasticsearch.proxy.SecurityFilter.doFilter(SecurityFilter.java:160)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668)
            at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
            at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
            at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
            at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
            at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)
            at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
            at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
            at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)
            at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
            at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
            at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
            at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
            at org.eclipse.jetty.server.Server.handle(Server.java:517)
            at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:306)
            at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
            at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
            at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
            at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:192)
            at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
            at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
            at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
            at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
            at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
            at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
            at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)

有什么帮助吗?

注意:- 我发现很少有其他与此错误相关的帖子,但没有使用 rewriteTarget 方法。到处都使用 rewriteURI,但我在 Jetty 9.3.5 中找不到它。

请帮忙。

【问题讨论】:

    标签: jetty embedded-jetty jetty-9


    【解决方案1】:

    我找到了解决办法。

    我们还需要为所有过滤器添加&lt;async-supported&gt;true&lt;/async-supported&gt;

    【讨论】:

    • 谢谢它为我做了 ... true
    【解决方案2】:

    对于 9.3.7 版的嵌入式码头,您可以通过以下方式注册 AsyncProxyServlet:

        ServletHandler proxyHandler = new ServletHandler();
        AsyncProxyServlet servlet = ...your instance of a proxy...;
        ServletHolder proxyServletHolder = new ServletHolder(servlet);
        proxyServletHolder.setAsyncSupported(true);
        proxyServletHolder.setInitParameter("maxThreads", "100");
        proxyHandler.addServletWithMapping(proxyServletHolder, "/*");
    

    该处理程序可以添加到 HandlerList 等中。

    【讨论】:

      猜你喜欢
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多