Я уже довольно давно пытаюсь реализовать собственные собственные правила Java на SonarQube. Однако, похоже, что бы я ни старался, я не могу заставить новое правило отображаться в пользовательском интерфейсе SonarQube.SonarQube: пользовательские правила Java, не видимые в пользовательском интерфейсе
У меня только одно правило в настоящий момент, правило безопасности, которое проверяет, очищается ли текст. Правило расширяет BaseTreeVisitor и реализует JavaFileScanner. Он переопределяет visitMethodInvocation, чтобы выполнить некоторые проверки аргументов String для соответствующих методов. Вот аннотация определения правила:
@Rule(key = "Sanitize_HTML",
name = "HTML Responses Should be Sanitized",
tags = {"security", "owasp-a3"},
priority = Priority.CRITICAL)
@ActivatedByDefault
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.SECURITY_FEATURES)
@SqaleConstantRemediation("10min")
public class SanitizeHTMLCheck extends BaseTreeVisitor implements JavaFileScanner{...}
После написания правила, я хотел, чтобы проверить это, но быстро поняла, что я должен был обернуть его в плагин, чтобы сделать это. Я написал для этого три дополнительных класса, основанных исключительно на provided example plugin. Вот базовый класс:
public class SecurityPlugin extends SonarPlugin{
public List getExtensions(){
return Arrays.asList(
JavaClasspath.class,
JavaTestClasspath.class,
Java.class,
SecurityRulesDefinition.class,
SonarComponents.class,
DefaultJavaResourceLocator.class);
}
}
Классы в списке все значения (добавлено в отчаянии) за исключением SecurityRulesDefinition. Она отражает структуру MyJavaRulesDefinition класса из примера:
public class SecurityRulesDefinition implements RulesDefinition{
public void define(Context context){
NewRepository repository = context
.createRepository(RulesList.REPOSITORY_KEY, Java.KEY)
.setName("Security Rules");
AnnotationBasedRulesDefinition.load(repository, Java.KEY, RulesList.getChecks());
for(NewRule rule : repository.rules()){
rule.setInternalKey(rule.key());
}
repository.done();
}
}
Наконец, так же, как, например, вот RulesList, где все мои классы правила должны идти:
public class RulesList {
public static final String REPOSITORY_KEY = "security_java";
private RulesList(){}
public static List<Class> getChecks(){
return ImmutableList.<Class>builder().addAll(getJavaChecks()).addAll(getJavaTestChecks()).build();
}
//Add all checks to here...
public static List<Class<? extends JavaCheck>> getJavaChecks(){
return ImmutableList.<Class<? extends JavaCheck>>builder()
.add(SanitizeHTMLCheck.class)
.build();
}
//Put all test checks here
public static List<Class<? extends JavaCheck>> getJavaTestChecks(){
return ImmutableList.<Class<? extends JavaCheck>>builder()
.build();
}
}
Как я уже сказал , все они довольно сильно вырваны из примерного плагина, поэтому я понятия не имею, что с ними может быть ошибкой.
Я использую Eclipse с M2E, чтобы попытаться построить плагин. По предложению Coding A Plugin страницы ДОКУМЕНТАЦИИ, я уже добавил следующий плагин тег в мою pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.13</version>
<extensions>true</extensions>
<configuration>
<pluginKey>securityrules</pluginKey>
<pluginClass>org.myOrg.sonar_analysis.security_rules_java.SecurityPlugin</pluginClass>
<pluginName>Sonar Java Custom Security Rules</pluginName>
<pluginDescription>Implements several checks against OWASP-Top-10 vulnerabilities.</pluginDescription>
</configuration>
</plugin>
</plugins>
</build>
Сейчас, по всему, что я читал, я должен быть в состоянии построить проект (право- щелкните по проекту> Запустить как> Maven Build (с целью «пакет») и оставьте полученный .jar в SONAR_HOME/расширения/плагины, и когда я перезапущу сервер, должно быть правило (и репозиторий). что я пытаюсь, это никогда не бывает. Я потратил часы, расчесывая Интернет и пытаясь найти что-либо, но правило никогда не появляется в пользовательском интерфейсе.
Я что-то упустил? Я что-то не так сделал? код неправильный или отсутствует что-нибудь?
Спасибо, что прочитали этот пост монстра. Любой совет, который у вас есть, ценен, поскольку у меня нет идей.
Я ведущий поддерживающий Java-плагин. Мы действительно заинтересованы в том, что вы делаете в отношении OWASP, так как мы также хотим настроить правила Owasp top 10 (как вы могли заметить). Не могли бы вы связаться с [email protected], чтобы мы могли обсудить, чего вы пытаетесь достичь? – benzonico
относительно вашего вопроса: Вы пытались только начать с примера проекта и заставить его работать? Не могли бы вы поделиться своими источниками? – benzonico