gpt4 book ai didi

java - AsyncProxyServlet 中的 Jetty HttpClient 不支持 SSL?

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:20 25 4
gpt4 key购买 nike

使用 jetty 9.4.8.v20171121

上述类的第 70 行在此代码中抛出空指针异常:

SSLEngine engine = sslContextFactory.newEngine(host, port);

我已经在此类的构造函数的第一行设置了一个断点,并且它从未被调用过,那么为什么调用 newConnection 时没有先创建 SslContextFactory,因为在构造函数中是唯一设置它的地方。

这是一个代理请求,所有主机、端口、 key 都很好。它是从 ClientSelectorManager 调用的。

此外,这仅在调试下显示,似乎存在一个未作为错误抛出的错误

堆栈跟踪: DEBUG org.eclipse.jetty.client.AbstractConnectionPool [] - 连接 1/256 创建失败

java.lang.NullPointerException: null
at org.eclipse.jetty.io.ssl.SslClientConnectionFactory.newConnection(SslClientConnectionFactory.java:70) ~[jetty-io-9.4.8.v20171121.jar:9.4.8.v20171121]
at org.eclipse.jetty.client.AbstractConnectorHttpClientTransport$ClientSelectorManager.newConnection(AbstractConnectorHttpClientTransport.java:172) ~[?:?]
at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:208) ~[jetty-io-9.4.8.v20171121.jar:9.4.8.v20171121]
at org.eclipse.jetty.io.ManagedSelector.access$1600(ManagedSelector.java:60) ~[jetty-io-9.4.8.v20171121.jar:9.4.8.v20171121]
at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:650) [jetty-io-9.4.8.v20171121.jar:9.4.8.v20171121]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708) [jetty-util-9.4.8.v20171121.jar:9.4.8.v20171121]
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626) [jetty-util-9.4.8.v20171121.jar:9.4.8.v20171121]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_121]

我认为这里的答案是覆盖 newHttpClient() 并创建您自己的新 contextFactory 并将其作为构造函数 arg 传递。

最佳答案

你要么还没有启动 HttpClient(又名 HttpClient.start())或者您没有为 HttpClient 构造函数提供 SslContextFactory

既然你提到了 newHttpClient(),我猜你有 ProxyServlet(你在问题中没有提到)。

是的,默认的 HttpClient 没有 SSL 上下文或配置。这由您来定义/提供。

重写 AbstractProxyServlet.newHttpClient() 是合适的。

参见默认实现:https://github.com/eclipse/jetty.project/blob/jetty-9.4.9.v20180320/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/AbstractProxyServlet.java#L349-L361

你可以逃脱......

package jetty.proxy;

import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.proxy.AsyncProxyServlet;
import org.eclipse.jetty.util.ssl.SslContextFactory;

public class MyProxyServlet extends AsyncProxyServlet
{
@Override
protected HttpClient newHttpClient()
{
SslContextFactory ssl = new SslContextFactory();
ssl.setTrustAll(true); // configure ssl (example, not required)
return new HttpClient(ssl);
}
}

关于java - AsyncProxyServlet 中的 Jetty HttpClient 不支持 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com