SpotBugs
SpotBugs
SpotBugs 是 Findbugs 的继任者,(Findbugs 已经于 2016 年后不再维护),用于对代码进行静态分析,查找相关的漏洞。目前 SpotBugs 3.1.3 自带检测器,其中有 90 余种 Bad practice,155 余种 Correctness,9 种 Experimental,2 种 Internationalization,17 种 Malicious code vulnerability,46 种 Multithreaded correctness,4 种 Bogus random noise,37 种 Performance,11 种 Security,87 种 Dodgy。
- Bad practice 不佳实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配(如重写 equals 但没重写 hashCode,或相反情况等)
- Correctness 可能导致错误的代码(如空指针引用、无限循环等)
- Experimental 实验性
- Internationalization 国际化相关问题(如错误的字符串转换等)
- Malicious code vulnerability 可能受到的恶意攻击(如访问权限修饰符的定义等)
- Multithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
- BogusMultithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
- Performance 运行时性能问题(如由变量定义,方法调用导致的代码低效问题等)
- Security 安全问题(如 HTTP,SQL,DB 等)
- Dodgy code 导致自身错误的代码(如未确认的强制转换、冗余的空值检查等)
Maven
Maven 插件方式使用 spotbugs 及相关插件:
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<plugins>
<plugin>
<groupId>com.h3xstream.findsecbugs</groupId>
<artifactId>findsecbugs-plugin</artifactId>
<version>LATEST</version>
</plugin>
<plugin>
<groupId>com.mebigfatguy.fb-contrib</groupId>
<artifactId>fb-contrib</artifactId>
<version>7.4.3.sb</version>
</plugin>
</plugins>
</configuration>
</plugin>
Gradle
buildscript {
repositories {
mavenLocal()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "com.diffplug.spotless:spotless-plugin-gradle:3.24.1"
classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:2.0.0"
}
}
plugins {
id "com.github.johnrengelman.shadow" version "5.1.0"
id 'org.springframework.boot' version "2.1.7.RELEASE"
}
apply plugin: "com.github.spotbugs"
spotbugs {
includeFilter = file("$rootDir/buildscripts/spotbugs-filter.xml")
}
tasks.withType(com.github.spotbugs.SpotBugsTask) {
reports {
xml.enabled = false
html.enabled = true
}
}
spotless {
format 'misc', {
target '**/*.gradle', '**/.gitignore'
trimTrailingWhitespace()
endWithNewline()
}
java {
removeUnusedImports()
googleJavaFormat()
}
freshmark {
target '**/*.md'
}
}
其中 spotbugs-filter.xml 定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter
xmlns="https://github.com/spotbugs/filter/3.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://github.com/spotbugs/filter/3.0.0 https://raw.githubusercontent.com/spotbugs/spotbugs/3.1.0/spotbugs/etc/findbugsfilter.xsd">
<Match>
</Match>
</FindBugsFilter>