spring-cloud / spring-cloud/spring-cloud-vault

HttpMessageConverterExtractor (v. 5.3.22) not respecting response class / responds type of VaultResponses

Offen
#653 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

status: waiting-for-feedback
Vorherrschende Sprache
Java
Sterne
291
Forks
152
Ø Merge
11 Std. 24 Min.
Gemergte PRs (30 T.)
3

Beschreibung

spring cloud version: 2021.0.3
spring version: 2.7.3 (Spring boot starter)

the vault library doesn't seem to be respecting the response type as it passes it in to HttpMessageConverterExtractor
internally.

** note** please look at the screenshots of my debugger - you will see that HttpMessageConverterExtractor cannot properly parse VaultResponses

Ex:

public class SomeClass {
}
@SpringBootApplication
public class VaultdebugApplication {
	@Bean void createBean() {
		List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
		messageConverters.add(new ByteArrayHttpMessageConverter());
		messageConverters.add(new StringHttpMessageConverter());
		messageConverters.add(new ResourceHttpMessageConverter(false));
		HttpMessageConverterExtractor x = new HttpMessageConverterExtractor(SomeClass.class, messageConverters);
	}
	public static void main(String[] args) {
		SpringApplication.run(VaultdebugApplication.class, args);
	}
}

the above works - HttpMessageConverterExtractor recognizes SomeClass.class as the response type one I trace it through the debugger.

image

however - when I try to read a secret from a vault Versioned backend (kv2) for whatever reason running the debugger at that same place shows that HttpMessageConverterExtractor will not recognize SomeClass.class.

@SpringBootApplication
public class VaultdebugApplication {
	@Bean
	public Secrets secrets(VaultTemplate operations) {
		VaultResponseSupport<SomeClass> response = operations.read("some/vault/path", SomeClass.class);
		System.out.println(response.getRequiredData()); // results in null
		System.out.println(response.getData()); // results in null

		return null;
	}
	public static void main(String[] args) {
		SpringApplication.run(VaultdebugApplication.class, args);
	}
}

image

in fact you can even see that - whatever is passed into Type responseType field isn't a class but an instance of VaultResponses.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie mit VaultTemplate.read(..., SomeClass.class), VaultResponseSupport und dem im Bericht gezeigten Aufruf von HttpMessageConverterExtractor; reproduzieren Sie das Problem mit einem Vault-KV2-Backend und untersuchen Sie den an den Extractor übergebenen responseType. Verfolgen Sie die vorhandenen Tests zur Antwortkonvertierung und ergänzen Sie eine Abdeckung, die zeigt, dass die angeforderte Klasse erhalten bleibt und ihre Daten befüllt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java, spring, spring-boot
Bereich
backend, security
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.