0

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

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

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

4

1 回答 1

1

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

解决方案取决于这些:

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

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

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

所以您可能已经猜到了,通过反射您可以深入到请求或响应的任何字段。

于 2019-03-01T13:23:32.783 回答