Frühjahr RestTemplate erhält "401 Unauthorized"
Ich bin mit dem folgenden abrufen JSON über RestTemplate im Frühjahr 4:
protected DocInfoResponse retrieveData(String urlWithAuth) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + auth.getSig());
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<DocInfoResponse> response = restTemplate.exchange(urlWithAuth, HttpMethod.GET, request, DocInfoResponse.class);
return response.getBody();
}
Verwendete ich den selben code (mit verschiedenen response-Klasse), erfolgreich bekommen ein JSON-doc von der selben Seite (mit unterschiedlichen Parametern um einen anderen doc).
Wenn ich führen Sie den obigen code erhalte ich die folgende stack-trace (teilweise):
Caused by: org.springframework.web.client.HttpClientErrorException: 401 Unauthorized
at
org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
Kann jemand Punkt mich, warum dies sein könnte empfangen die Ausnahme.
Haben Sie versucht, auf das gleiche aus browser oder Briefträger? Ist es die dort arbeiten, mit dieser Authentifizierung?
Ja, ich habe die gleiche URL, um erfolgreich die erwarteten Ergebnisse zurück im Browser.
Es ist sicherlich ein Authentifizierungs-problem. Sind Sie auf der Generierung von digitalen Signaturen für die Authentifizierung? Die Signatur, URL-spezifische?
Digitale Signatur generiert wird. Das ist in der 'auth.getSig ()' - Aufruf. Es gibt nichts in der site-Dokumentation, gibt es URL-spezifisch. Die gleiche Signatur/Algorithmus ist in beiden Fällen (die URL der funktioniert und den man gar nicht).
Kannst du die andere Methode die funktioniert?
Ja, ich habe die gleiche URL, um erfolgreich die erwarteten Ergebnisse zurück im Browser.
Es ist sicherlich ein Authentifizierungs-problem. Sind Sie auf der Generierung von digitalen Signaturen für die Authentifizierung? Die Signatur, URL-spezifische?
Digitale Signatur generiert wird. Das ist in der 'auth.getSig ()' - Aufruf. Es gibt nichts in der site-Dokumentation, gibt es URL-spezifisch. Die gleiche Signatur/Algorithmus ist in beiden Fällen (die URL der funktioniert und den man gar nicht).
Kannst du die andere Methode die funktioniert?
InformationsquelleAutor Squigglylot | 2017-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich, dass mein Problem Zitat oben wurde durch doppelte Verschlüsselung geschieht auf der
auth
params. Ich entschloss mich, es mitUriComponentsBuilder
und explizit aufrufenencode()
auf dieexchange()
.Meine
UriComponentsBuilder
wurde erstellt mit:(Die
auth.appendAuth()
fügt zusätzliche.queryParams()
benötigt, die durch den Ziel-service inurlString
.)Den Aufruf ausführen dieser war
retrieveData(buildUrl(urlString));
.InformationsquelleAutor Squigglylot
Nach der Untersuchung auf mein eigenes problem, ich erkannte, dass FireFox RESTClient erfolgreich war, denn ich war verbunden mit der Ziel-URL. Die Basic-Auth, ich dachte, ich war mit, war nicht so einfach, nachdem alle.
Schließlich Las ich den doc von der app, die ich versuchte zu schließen, und erkannten, dass Sie vorschlagen, eine Verbindung token-Mechanismus. Jetzt funktioniert es.
Nach dem Lesen Ihres Codes, den ich sagen sieht es ganz OK, obwohl ich nicht sicher bin, was ist Ihr Gegenstand
auth
auf, die Sie nennengetSig
.Erste Sachen erste: versuchen, Zugriff auf Ihren service von jedem beliebigen client, wie ein web-browser, ein Postbote oder RESTClient. Stellen Sie sicher, dass Sie erfolgreich abrufen von infos, OHNE die Verbindung zu Ihrer app!!!
Je nach Ergebnis, ich sagen, Sie sollten entweder versuchen, Sie zu verschlüsseln manuell Ihre
Authorization
token (Sie easilly finden die Beiträge auf dieser Website zu zeigen, wie Sie) oder versuchen Sie einen anderen Anschluss-Mechanismus.froh, das hat geholfen! Ihre Frage war auch hilfreich 🙂
InformationsquelleAutor avi.elkharrat