Java 如何访问doPost(方法)主体中用于servlet请求的SSLSocket?

Java 如何访问doPost(方法)主体中用于servlet请求的SSLSocket?,java,servlets,jakarta-ee,jsse,sslsocketfactory,Java,Servlets,Jakarta Ee,Jsse,Sslsocketfactory,我正在通过子类化javax.servlet.HTTP.HttpServlet并重写doPost方法来实现HTTP servlet。在doPost方法的主体中,我需要访问用于处理请求并将用于处理响应的SSLSocket对象。servlet容器也被用作HTTPS服务器。没有web seservlet容器前面的服务器、负载平衡器、TLS终止设备等。客户端使用HTTPS直接连接到servlet容器 如何访问用于处理请求并将用于处理doPost方法主体内的响应的SSLSocket对象 您可能会好奇我为什么

我正在通过子类化javax.servlet.HTTP.HttpServlet并重写doPost方法来实现HTTP servlet。在doPost方法的主体中,我需要访问用于处理请求并将用于处理响应的SSLSocket对象。servlet容器也被用作HTTPS服务器。没有web seservlet容器前面的服务器、负载平衡器、TLS终止设备等。客户端使用HTTPS直接连接到servlet容器

如何访问用于处理请求并将用于处理doPost方法主体内的响应的SSLSocket对象


您可能会好奇我为什么需要这样做。我需要访问与连接相关联的通道绑定信息。是的,我知道目前JSSE规范中没有标准化通道绑定支持,因此Oracle提供的默认JSSE提供程序不支持通道绑定。这就是我使用Bouncy Castle的原因支持通道绑定的JSSE提供程序。

首先,在doPost中设置断点,并深入到线程堆栈上看到的变量中。有一个请求/响应对象,它们是特定于实现的(tomcat、jetty等)

解决方案取决于以下几点:

a) 如果可以通过钻取请求或响应的私有字段来访问sslsocket。我知道你可以和tomcat在一起

b) 如果您可以并且愿意编写使用反射的代码,并且没有安全策略阻止您调用Field.setAccessible(true)并使用Field.get(…)获取值

c) 如果您能够处理故障,并且您有明确的指示,可以在dev或qa中检测到此未编译代码的回归。这是因为服务器版本在将来肯定会更新,您的代码可能会突然中断而不会出现编译错误。集成测试是必须的


所以你可能猜到了,通过反思,你可以深入到请求或响应的任何领域。

简短回答:你不能。