【问题标题】:Setting the default SocketFactory设置默认的 SocketFactory
【发布时间】:2010-10-22 15:45:14
【问题描述】:

我最近将我的 Web 服务从 Axis 迁移到 CXF (2.1)。看起来,虽然 Axis 需要“axis.socketSecureFactory”集,但 CXF 使用了默认值。如何将 Java 中的默认 SocketFactory 设置为我自己的实现(例如属性)?

要做的是设置默认的 SocketFactory 属性,例如为我的信任库、密钥库和密码设置属性。

【问题讨论】:

标签: java web-services sockets ssl cxf


【解决方案1】:

如果我们谈论的是标准套接字,那么Socket.setSocketImplFactory(SocketImplFactory) 用于更改普通套接字的工厂,ServerSocket.setSocketFactory(SocketImplFactory) 用于服务器套接字。

如果您使用这些,请注意您只能设置这些工厂一次。

注意 java 套接字实现默认使用 SocksSocketImpl(java.net 中的包可见类),如果它发现工厂是 null,以防你想要一个可以将包切换到标准 java 实现的工厂。

【讨论】:

    【解决方案2】:

    根据javax.net.SocketFactory 的OpenJDK7 源代码,Sun JVM 被硬编码为为getDefault(); 返回一个javax.net.DefaultSocketFactory

    编辑:但是,默认的 SSLSocketFactory 可以通过安全属性ssl.SocketFactory.provider 设置

    【讨论】:

    • 在代码中你可以看到只有在你不设置另一个时才会返回。
    • @ssedano 该属性无法从其他任何地方访问,并且代码定义了一个标准的惰性实例化 getter。 Powerlord 是正确的,因此该值是有效的硬编码。
    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2016-04-25
    相关资源
    最近更新 更多