我最近将我的 Web 服务从 Axis 迁移到 CXF (2.1)。看起来,虽然 Axis 需要“axis.socketSecureFactory”集,但 CXF 使用了默认值。如何将 Java 中的默认 SocketFactory 设置为我自己的实现(例如属性)?
我不想做的是设置默认的 SocketFactory 属性,例如为我的信任库、密钥库和密码设置属性。
我最近将我的 Web 服务从 Axis 迁移到 CXF (2.1)。看起来,虽然 Axis 需要“axis.socketSecureFactory”集,但 CXF 使用了默认值。如何将 Java 中的默认 SocketFactory 设置为我自己的实现(例如属性)?
我不想做的是设置默认的 SocketFactory 属性,例如为我的信任库、密钥库和密码设置属性。
如果我们谈论的是标准套接字,则Socket.setSocketImplFactory(SocketImplFactory)
用于将工厂更改为普通套接字和ServerSocket.setSocketFactory(SocketImplFactory)
服务器套接字。
如果您正在使用这些,请注意您只能设置这些工厂一次。
请注意,Java 套接字实现默认使用 SocksSocketImpl(java.net 中的一个包可见类),如果它发现工厂是null
在您想要一个可以将包切换到标准 java 实现的工厂的情况下。
根据 OpenJDK7 源代码 for javax.net.SocketFactory
,Sun JVM 被硬编码为返回一个javax.net.DefaultSocketFactory
forgetDefault();
编辑:但是,默认 SSLSocketFactory 可以由安全属性设置ssl.SocketFactory.provider