Spring Boot RestTemplate Basic-Authentifizierung mit RestTemplateBuilder
Im Frühjahr Starten, die ich versuche zu schaffen, eine RestTemplate die Verwendung der Standardauthentifizierung mit
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
builder.basicAuthorization("username", "password");
RestTemplate template = builder.build();
return template;
}
Ich dann Spritzen Sie das RestTemplate in meinem service-Klasse als
@Autowired
private RestTemplate restTemplate;
Aber, meine Anträge mit einem 401 unauthorized-exception:
Caused by: org.springframework.web.client.HttpClientErrorException: 401 Unauthorized
Mit einem anderen REST-Client (Briefträger) die Anfragen auf die gleiche URL erfolgreich, so nehme ich die basic-Authentifizierung nicht richtig funktioniert. Aus der debug-Ausgabe sieht es aus, als ob die authentication header ist nicht gesetzt. Was diese Arbeit machen?
- gehen Sie zu Debuggen und zu sehen, ob es setzt die header richtig, wäre meine Vermutung, Sie haben mehr resttemplate im spring-Kontext.
- Es ist nur eine RestTemplate im Frühjahr Kontext.
- teilen Sie Ihre client-code..Wie Sie das senden der Anfrage
- Das problem ist Ihre Konfiguration, die
basicAuthorization
ist im Grunde eine factory-Methode für eine neueRestTemplateBuilder
aber Sie sind nicht mit der neu erzeugten Instanz. Tunreturn builder.basicAuthorization("username", "password").build();
anstelle von dem, was Sie haben jetzt (oder Wiederverwendung der neu erstellten Instanz).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie mit der
RestTemplateBuilder
in einer falschen Art und Weise. DieRestTemplateBuilder
unveränderlich ist. Also, wenn dabeigenerator.basicAuthorization("username", "Passwort")
Sie tatsächlich bekommen eine neue Instanz, mit einemBasicAuthorizationInterceptor
Hinzugefügt und konfiguriert, derRestTemplateBuilder
. (dies gilt für alle konfigurationsarten dieRestTemplateBuilder
Sie alle erstellen Sie eine neue Instanz kopiert).Aber dein code ist zu verwerfen, die speziell konfigurierte Instanz und Sie sind im Grunde mit der nicht gesicherten Standard
RestTemplateBuilder
.Dieser code sollte ersetzt werden durch etwas wie dieses.
Wird das speziell konfigurierte Instanz.
One-Lösung ist zum erstellen der RestTemplate wie folgt: