მართალი და პროქსიზე გამავალი RestTemplate bean-ების კონფიგურაცია Spring-ში
შექმენით ცალკეული RestTemplate bean-ები HTTP პროქსისთვის და მკაფიოდ პირდაპირი JDK კავშირისთვის, ნაცვლად თითოეული გამოძახების გარშემო საერთო მარშრუტის შეცვლისა.
ზოგიერთი გამოძახება კორპორატიული პროქსის გავლით უნდა მოხდეს, ზოგიერთი სერვისი კი პირდაპირ მისაწვდომია. მიეცით ამ მარშრუტებს ცალკეული RestTemplate ინსტანციები იმის ნაცვლად, რომ შეცვალოთ ერთი საერთო ფაბრიკა, როცა მოთხოვნები შეიძლება გადაიფაროს.
არსებული Spring კონფიგურაციის კლასის შიგნით:
@Bean("directRestTemplate")
RestTemplate directRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(java.net.Proxy.NO_PROXY);
return new RestTemplate(factory);
}
@Bean("proxyRestTemplate")
RestTemplate proxyRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example", 8080)));
return new RestTemplate(factory);
}
Spring 6.2-ის JDK მოთხოვნების ფაბრიკისთვის Proxy.NO_PROXY იძლევა მკაფიო პირდაპირი კავშირის პოლიტიკას. ფაბრიკის პროქსის დაუყენებლად დატოვება ნაცვლად ჩვეულებრივ URLConnection კონფიგურაციის გზას უშვებს, რომელმაც შეიძლება JVM პროქსი აირჩიოს.
გამოიყენეთ @Qualifier ინექციის წერტილში საჭირო bean-ის ასარჩევად, მაგალითად @Qualifier("directRestTemplate") RestTemplate rest. მხოლოდ ორი bean-ის განსაზღვრა არ არჩევს მათ შორის ორაზროვანი დამოკიდებულებისთვის.
ეს მაგალითი ირჩევს ავთენტიფიკაციის გარეშე HTTP პროქსის. ტრანსპორტი, რომელსაც პროქსის ავთენტიფიკაცია სჭირდება, შეიძლება ცალკე აშენდეს მისი მხარდაჭერილი სერთიფიკატების მიმწოდებლით, იმავე bean-ის არჩევის წყობის შენარჩუნებით. Apache HttpClient 5-ით Spring 6-ისთვის, შეზღუდეთ ეს მიმწოდებელი პროქსის საბოლოო წერტილით.
აპლიკაციის მიერ განზრახ დაყენებული სხვა ინტერცეპტორები ან მოთხოვნების ფაბრიკები კვლავ მის საკუთარ კლიენტის კონფიგურაციას ეკუთვნის. შეინარჩუნეთ ისინი იმ მარშრუტთან, რომელსაც ნამდვილად სჭირდება ისინი.