如何获取 SSLHostConfig?

How to get the SSLHostConfig?

我可以通过

获得父连接器
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        QueryExp qe = Query.match(Query.attr("port"), Query.value("443"));
        ObjectName on = new ObjectName("*:type=Connector,*");
        Set<ObjectName> objectNames = mbs.queryNames(on, qe);

我不想读 server.xml 以防它不同步。 如何获得 SSLHostConfig?

Connector MBean 不包含有关 TLS 配置的信息。您需要在 type=ThreadPool 的 bean 上调用方法 findSslHostConfigsThreadPool 实际上是用词不当,因为这个 MBean 由每个 ProtocolHandler.

导出
final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
final QueryExp qe = Query.eq(Query.attr("port"), Query.value(443));
final ObjectName on = new ObjectName("*:type=ThreadPool,*");
final Set<ObjectName> protocols = mbs.queryNames(on, qe);
for (final ObjectName protocol : protocols) {
    SSLHostConfig[] configs = (SSLHostConfig[]) mbs.invoke(protocol, "findSslHostConfigs", null, null);
    // do something with the SSLHostConfig
}

另外,SSLHostConfig 也可以作为 MBean 使用:它们具有 属性 type=SSLHostConfig.