是否有任何Checkstyle,PMD或Findbugs规则可以找到以下非线程安全弹簧单例实现?
private String helperVar;
public String getValue(String value) {
helperVar = value;
return convertValue();
}
private String convertValue() {
return helperVar.trim();
}
Run Code Online (Sandbox Code Playgroud)
我知道这个样本很糟糕,但这是展示我的意思的最简单方法.
当在一次执行中从bean执行getValue方法时,它可以正常工作.但是当在多用户环境中执行它时,将导致不可预测的错误/行为.
有没有办法找到这些出现而无需手动完成代码?是否有任何静态代码检查器可以自动检查这个及其每个变化?
是否可以找到Android OpenSSLSocketImpl 关闭Socket 的原因?(如何调试Android内部库?)
背景:我尝试创建 SSLContext 的源可以在调用 resultSocket.getSession() 期间在 TLSNetSocketUtil.java 中找到,底层 Socket 正在关闭。
当套接字关闭时,我记录了堆栈跟踪:
at org.silvertunnel_ng.netlib.layer.logger.LoggingNetSocket.close(LoggingNetSocket.java:66)
at org.silvertunnel_ng.netlib.api.impl.NetSocket2SocketImpl.close(NetSocket2SocketImpl.java:144)
at java.net.Socket.close(Socket.java:319)
at com.android.org.conscrypt.OpenSSLSocketImpl.closeUnderlyingSocket(OpenSSLSocketImpl.java:1134)
at com.android.org.conscrypt.OpenSSLSocketImpl.shutdownAndFreeSslNative(OpenSSLSocketImpl.java:1127)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:406)
at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:623)
at com.android.org.conscrypt.OpenSSLSocketImpl.getSession(OpenSSLSocketImpl.java:787)
at org.silvertunnel_ng.netlib.layer.tls.TLSNetSocketUtil.createTLSSocket(TLSNetSocketUtil.java:111)
Run Code Online (Sandbox Code Playgroud)
我想我已经将其固定在OpenSSLSocketImpl.java中的第 528 - 555 行,所以握手的某些内容似乎不起作用,但是什么呢?
在除 Android 之外的其他 JVM 上运行时效果很好。
有什么建议么?
更新 1:来自 startHandshake-Method 的堆栈跟踪:
java.net.SocketException: Socket closed
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318)
at org.silvertunnel_ng.netlib.layer.tls.TLSNetSocketUtil.createTLSSocket(TLSNetSocketUtil.java:110)
at org.silvertunnel_ng.netlib.layer.tls.TLSNetLayer.createNetSocket(TLSNetLayer.java:101)
at org.silvertunnel_ng.netlib.layer.logger.LoggingNetLayer.createNetSocket(LoggingNetLayer.java:130)
at org.silvertunnel_ng.netlib.layer.tor.circuit.TLSConnection.<init>(TLSConnection.java:128)
at org.silvertunnel_ng.netlib.layer.tor.circuit.TLSConnectionAdmin.getConnection(TLSConnectionAdmin.java:118)
at org.silvertunnel_ng.netlib.layer.tor.circuit.Circuit.<init>(Circuit.java:299)
at org.silvertunnel_ng.netlib.layer.tor.clientimpl.TorBackgroundMgmtThread$1.run(TorBackgroundMgmtThread.java:157)
Run Code Online (Sandbox Code Playgroud)