问题描述
我们希望简化合规性,对于FedRAMP,我们希望在数据库对象的所有字段中都具有类似的内容
@FedRamp(confidentiality=LOW,integrity=MODERATE,availability=HIGH)
如果人们添加数据而忘记将它们添加到* Dbo.java类的'any'字段中,我们希望checkstyle破坏构建。然后,我们可以在每个数据项(因此是整个系统)上生成FedRAMP合规性。我们在每个类上运行checkstyle,但只希望此规则在* Dbo.java结尾的类上运行。在我们导入一些已经存在的checkstyle规则或插件并向其中添加类名过滤器的地方,这可能吗?
谢谢, 院长
解决方法
要报告任何类的此类情况的违规行为,您可以使用 MatchXpathCheck(您需要 checkstyle 8.39+) 配置将如下所示:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name = "Checker">
<module name="TreeWalker">
<module name="MatchXpath">
<property name="id" value="fedramp_check"/>
<property name="query" value="//CLASS_DEF/OBJBLOCK/VARIABLE_DEF/MODIFIERS/ANNOTATION/IDENT[not(@text='FedRamp')]"/>
<message key="matchxpath.match"
value="Field should have 'FedRamp' annotation."/>
</module>
</module>
</module>
这将报告如下违规行为:
$ cat Test.java
class Test {
@FedRamp(confidentiality=LOW,integrity=MODERATE,availability=HIGH)
private int withAnnotation = 11; // no violation
@Fed(confidentiality=LOW,availability=HIGH)
private int without = 11; // violation
@NotNull
int without = 11; // violation
}
$ java -jar checkstyle-8.42-all.jar -c config.xml Test.java
Starting audit...
[ERROR] C:\workdir\Test.java:6:4: Field should have FedRamp annotation. [fedramp_check]
[ERROR] C:\workdir\Test.java:9:4: Field should have FedRamp annotation. [fedramp_check]
Audit done.
Checkstyle ends with 2 errors.
您的问题的第二部分 - 仅针对特定类执行缩小 - 可以通过多种方式解决。
- 使用稍微不同的 xpath 来过滤类名(不是文件,因为单个文件中可以有很多类)
<property name="query"
value="//CLASS_DEF[./IDENT[ends-with(@text,'Dbo')]]/OBJBLOCK/VARIABLE_DEF/MODIFIERS/ANNOTATION/IDENT[not(@text='FedRamp')]"/>
- 使用 BeforeExecutionExclusionFileFilter - 它是整个配置的过滤器,只有当您有一个单独的配置来检查注释内容时才可以正常工作。
- 禁止对其他类文件进行此检查的违规(例如,通过 id),请参阅 doc