Περιορισμός διαπιστευτηρίων διαμεσολαβητή RestTemplate με HttpClient 5
Περιορίστε τα διαπιστευτήρια του Apache HttpClient 5 στον κεντρικό υπολογιστή και τη θύρα του διαμεσολαβητή πριν δώσετε τη μεταφορά σε RestTemplate του Spring 6.
Η σύνδεση στον διαμεσολαβητή ανήκει στον πάροχο διαπιστευτηρίων της μεταφοράς. Για Spring 6 με Apache HttpClient 5, περιορίστε αυτόν τον λογαριασμό στον ενδιάμεσο:
var proxy = new org.apache.hc.core5.http.HttpHost(
"http", "proxy.example", 8080);
var credentials = new org.apache.hc.client5.http.impl.auth
.BasicCredentialsProvider();
credentials.setCredentials(
new org.apache.hc.client5.http.auth.AuthScope(proxy),
new org.apache.hc.client5.http.auth.UsernamePasswordCredentials(
proxyUser, proxyPassword.toCharArray()));
var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
.setProxy(proxy)
.setDefaultCredentialsProvider(credentials)
.build();
var factory = new org.springframework.http.client
.HttpComponentsClientHttpRequestFactory(http);
var rest = new org.springframework.web.client.RestTemplate(factory);Η εφαρμογή παρέχει τις τιμές proxyUser και proxyPassword και κατέχει τον κύκλο ζωής του πελάτη HTTP. Επαναχρησιμοποιήστε το rest για τον φόρτο εργασίας αντί να κατασκευάσετε άλλο προεπιλεγμένο πρότυπο στο σημείο κλήσης.
Το AuthScope περιορίζει πού ισχύουν αυτά τα διαπιστευτήρια. Το παράδειγμα παρέχει συνηθισμένα διαπιστευτήρια ονόματος χρήστη/κωδικού· το όνομα BasicCredentialsProvider δεν εξαναγκάζει κάθε πρόκληση να χρησιμοποιεί το σχήμα HTTP Basic.
Με προορισμό HTTPS, η μεταφορά μπορεί να απαντήσει σε πρόκληση του διαμεσολαβητή κατά το CONNECT, πριν υπάρξει το κρυπτογραφημένο αίτημα HTTP της εφαρμογής. Ένας γενικός interceptor προορισμού που προσθέτει Proxy-Authorization δεν ισοδυναμεί με αυτή τη διαπραγμάτευση.
Διαμορφώστε ξεχωριστά οποιονδήποτε λογαριασμό προορισμού. Αν ο διαμεσολαβητής εξακολουθεί να απορρίπτει το αίτημα, κρατήστε το σχήμα ταυτοποίησης που διαφημίζει και τον πραγματικό κεντρικό υπολογιστή και θύρα. Διαπιστευτήρια περιορισμένα σε άλλο τελικό σημείο δεν θα ταιριάξουν απλώς επειδή ο κωδικός είναι σωστός.