Một số lệnh gọi phải dùng proxy của công ty trong khi một dịch vụ khác được truy cập trực tiếp. Hãy cấp cho các tuyến đó những instance RestTemplate riêng thay vì thay đổi một factory dùng chung khi các yêu cầu có thể chồng chéo.

Bên trong một lớp cấu hình Spring hiện có:

@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);
}

Với factory yêu cầu JDK của Spring 6.2, Proxy.NO_PROXY cung cấp chính sách kết nối trực tiếp rõ ràng. Nếu để proxy của factory không được đặt, thay vào đó đường cấu hình URLConnection thông thường được cho phép, có thể chọn một proxy của JVM.

Dùng @Qualifier tại điểm tiêm để chọn bean cần thiết, ví dụ @Qualifier("directRestTemplate") RestTemplate rest. Chỉ khai báo hai bean không chọn giữa chúng khi phụ thuộc không rõ ràng.

Ví dụ này chọn một proxy HTTP không xác thực. Một transport cần xác thực proxy có thể được xây dựng riêng với nhà cung cấp thông tin xác thực được hỗ trợ, đồng thời giữ nguyên cách bố trí chọn bean. Với Spring 6 dùng Apache HttpClient 5, giới hạn nhà cung cấp đó trong điểm cuối của proxy.

Các interceptor hoặc factory yêu cầu khác do ứng dụng cố ý cài đặt vẫn thuộc cấu hình client của chính nó. Hãy giữ chúng với tuyến thực sự cần chúng.

Bài viết liên quan