安装sonar并配置
docker安装sonarqube,sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com)
对webgoat进行sonar扫描
扫描结果
bugs
Change this condition so that it does not always evaluate to "false"
意思是这里的else if语句不会执行,因为ipAddressKnow为true,所以if 和else if的条件结果是一样的。
Use try-with-resources or close this "PreparedStatement" in a "finally" clause.
提示资源没有关闭,需要在finally中进行资源关闭,但是把资源关闭放到finally中由提示这样写不规范有异味。所以它推荐的写法是将创建资源流的代码放在try()中,这样系统会自动的关闭资源,不需要我们写.close()方法
【转】Sonar扫描bug修复 - 登风360 - 博客园 (cnblogs.com)
"Random" objects should be reused
问题:在类的多个方法中使用了Random random = new Random();不应该在方法内创建random实例,而应该把random实例创建为类的属性,可以在多个地方调用,而且建议用 SecureRandom is preferred to Random。
解决:随机数定义为一个属性,然后在下面的方法里面生成随机值
private Random rand = SecureRandom.getInstanceStrong(); // SecureRandom is preferred to Randompublic void doSomethingCommon() {int rValue = this.rand.nextInt();//...
Use the "equals" method if value comparison was intended.
这个误报了,因为这里!=是用来判断不为null,跟值比较用的是equals方法
合规的方案也是这样写的。
String firstName = getFirstName();
String lastName = getLastName();if (firstName != null && firstName.equals(lastName)) { ... };
Do something with the "boolean" value returned by "createNewFile"
意思是这个方法可能失败,但是并没有失败处理。
Compliant Solution
public void doSomething(File file, Lock lock) {if (!lock.tryLock()) {// lock failed; take appropriate action}if (!file.delete()) {// file delete failed; take appropriate action}
}
Null pointers should not be dereferenced
代码中存在空指针解引用的问题。空指针解引用指的是当一个对象为空(null)时,尝试访问它的方法或属性。
为了修复这个问题,你需要确保在访问对象的方法或属性之前,先进行空指针检查