Sonarqube: Annotate this member with "@Authowired", "@Resource", "@Inject" or "@Value", or remove it

0

Prośba o wsparcie... Mam zagwostkę sonarową, której nie mogę rozkimać:

  1. Sonarqube Mówi: Annotate this member with "@Authowired", "@Resource", "@Inject" or "@Value", or remove it. (w odniesieniu do credentials się czepia):

Wklejam kawałek kodu:

@Service

public class DocServiceBean implements DocService{

 @Value("${bla}")
 private String accountNr;
 
 @Value("${blabla}")
 private String accountKey;

 private SharedCredentials credentials;
 
 @PostConstuct
 private void init() {
    try { this.credentials = new SharedCredentials(accountNr, accountKey);
 } catch (InvalidKeyException e){
   log.error(e.getMessage())}
 }
}

Co zrobić z tym polem credentials? Jaka adnotacja? Dzięki!

1

Dobra, chyba mam. Może komuś się przyda:
Zgodnie z tym postem, wystarczy zainicjować z nullem:
https://stackoverflow.com/questions/54162663/using-spring-constructor-injection-with-sonarqube

NB Dzięki Cerrato.

0

Nadal jest problem. Jednak się okazuje, że Sonalint plugin pokazał mi lokalnie, że private SharedCredentials credentials = null załatwia problem, ale jednak po wygenerowaniu raportu Sonarqube nadal jednak to nie jest satysfakcjonujące rozwiązanie i pokazuje mi jako "Vulnerability": "Annotate this member with "@Autowired", "@Resource", "@Inject", or "@Value", or remove it." Any thoughts jak to ugryźć?

0
Gonzik napisał(a):

Dobra, chyba mam. Może komuś się przyda:
Zgodnie z tym postem, wystarczy zainicjować z nullem:
https://stackoverflow.com/questions/54162663/using-spring-constructor-injection-with-sonarqube

Tylko że ty nie wstrzykujesz przez konstruktor, a przynajmniej żadnego konstruktora w tym kodzie nie widzę

0

ok, dopiszę.

4

Zawsze jest opcja //nosonar

SnarQube czepia się, że masz prywatne pole klasy, inicjalizowane przez prywatną metodę klasy, więc teoretycznie nie ma jak być zainicjalizowane.

Ta klasa byłaby bardziej normalna i przeszła by przez sonara bez problemu w takim kształcie:

@Service
public class DocServiceBean implements DocService{

 private final String accountNr;
 private final String accountKey;
 private final SharedCredentials credentials;

 @Autowire
 DocServiceBean(@Value("${bla}") String accountNr, @Value("${blabla}") String accountKey){
   this.accountNr = accountNr;
   this.accountKey = accountKey;

   try { this.credentials = new SharedCredentials(accountNr, accountKey);
     } catch (InvalidKeyException e){
       log.error(e.getMessage())}
     }
 }
}

Przy okazji da się ją w takiej formie przetestować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1