小编B4d*_*0bi的帖子

用于查找非线程安全单例弹簧实现的代码质量规则

是否有任何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方法时,它可以正常工作.但是当在多用户环境中执行它时,将导致不可预测的错误/行为.

有没有办法找到这些出现而无需手动完成代码?是否有任何静态代码检查器可以自动检查这个及其每个变化?

java spring findbugs checkstyle pmd

11
推荐指数
1
解决办法
1260
查看次数

getSession 关闭 Socket

是否可以找到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)

java sockets android openssl

5
推荐指数
1
解决办法
982
查看次数

标签 统计

java ×2

android ×1

checkstyle ×1

findbugs ×1

openssl ×1

pmd ×1

sockets ×1

spring ×1