Преглед на файлове

禁用RestTemplate Cookie回话保持功能

woody преди 1 година
родител
ревизия
8aa294d3cb
променени са 1 файла, в които са добавени 56 реда и са изтрити 56 реда
  1. 56 56
      framework-base/src/main/java/com/chelvc/framework/base/config/HttpClientConfigurer.java

+ 56 - 56
framework-base/src/main/java/com/chelvc/framework/base/config/HttpClientConfigurer.java

@@ -51,61 +51,88 @@ public class HttpClientConfigurer {
     private final ObjectMapper objectMapper;
     private final HttpClientProperties httpClientProperties;
 
+    /**
+     * 修改默认的消息转换配置
+     *
+     * @param restTemplate RestTemplate实例
+     */
+    private void modifyDefaultMessageConverters(@NonNull RestTemplate restTemplate) {
+        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters().stream()
+                .map(converter -> {
+                    if (converter instanceof StringHttpMessageConverter) {
+                        return new StringHttpMessageConverter(StandardCharsets.UTF_8);
+                    } else if (converter instanceof MappingJackson2HttpMessageConverter) {
+                        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter =
+                                new MappingJackson2HttpMessageConverter(this.objectMapper);
+                        mappingJackson2HttpMessageConverter.setSupportedMediaTypes(
+                                Arrays.asList(
+                                        MediaType.TEXT_PLAIN,
+                                        MediaType.APPLICATION_JSON,
+                                        new MediaType("application", "*+json")
+                                )
+                        );
+                        return mappingJackson2HttpMessageConverter;
+                    }
+                    return converter;
+                }).collect(Collectors.toList());
+        restTemplate.setMessageConverters(messageConverters);
+    }
+
     @Bean
     public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
-        RestTemplate restTemplate = new RestTemplate(factory);
-        this.modifyDefaultMessageConverters(restTemplate);
-        return restTemplate;
+        RestTemplate template = new RestTemplate(factory);
+        this.modifyDefaultMessageConverters(template);
+        return template;
     }
 
     @Bean
     public ClientHttpRequestFactory clientHttpRequestFactory() {
-        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
-                new HttpComponentsClientHttpRequestFactory(this.httpClient());
+        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(this.httpClient());
         // 连接超时
-        clientHttpRequestFactory.setConnectTimeout(this.httpClientProperties.getConnectTimeout());
+        factory.setConnectTimeout(this.httpClientProperties.getConnectTimeout());
         // 数据读取超时时间,即SocketTimeout
-        clientHttpRequestFactory.setReadTimeout(this.httpClientProperties.getSocketTimeout());
+        factory.setReadTimeout(this.httpClientProperties.getSocketTimeout());
         // 从连接池获取请求连接的超时时间,不宜过长,必须设置,比如连接不够用时,时间过长将是灾难性的
-        clientHttpRequestFactory.setConnectionRequestTimeout(this.httpClientProperties.getConnectionRequestTimeout());
-        return clientHttpRequestFactory;
+        factory.setConnectionRequestTimeout(this.httpClientProperties.getConnectionRequestTimeout());
+        return factory;
     }
 
     @Bean
     public HttpClient httpClient() {
-        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
+        HttpClientBuilder builder = HttpClientBuilder.create();
         RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.create();
         registryBuilder.register("http", PlainConnectionSocketFactory.getSocketFactory());
 
         // 设置信任ssl访问
         try {
-            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build();
-            httpClientBuilder.setSSLContext(sslContext);
-            SSLConnectionSocketFactory sslConnectionSocketFactory =
-                    new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
-            registryBuilder.register("https", sslConnectionSocketFactory);
+            SSLContext ssl = new SSLContextBuilder().loadTrustMaterial(null, (chain, type) -> true).build();
+            builder.setSSLContext(ssl);
+            SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(ssl, NoopHostnameVerifier.INSTANCE);
+            registryBuilder.register("https", factory);
         } catch (GeneralSecurityException e) {
             log.warn("SSL setting failed: {}", e.getMessage());
         }
 
-        //使用Httpclient连接池的方式配置(推荐),同时支持netty,okHttp以及其他http框架
-        PoolingHttpClientConnectionManager poolingHttpClientConnectionManager =
-                new PoolingHttpClientConnectionManager(registryBuilder.build());
+        // 使用Httpclient连接池的方式配置(推荐),同时支持netty,okHttp以及其他http框架
+        PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registryBuilder.build());
         // 最大连接数
-        poolingHttpClientConnectionManager.setMaxTotal(this.httpClientProperties.getMaxTotal());
+        manager.setMaxTotal(this.httpClientProperties.getMaxTotal());
         // 同路由并发数
-        poolingHttpClientConnectionManager.setDefaultMaxPerRoute(this.httpClientProperties.getMaxPerRoute());
-        //配置连接池
-        httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager);
+        manager.setDefaultMaxPerRoute(this.httpClientProperties.getMaxPerRoute());
+        // 配置连接池
+        builder.setConnectionManager(manager);
         // 重试次数
-        httpClientBuilder.setRetryHandler(this.httpRequestRetryHandler());
-        //设置长连接保持策略
-        httpClientBuilder.setKeepAliveStrategy(this.connectionKeepAliveStrategy());
+        builder.setRetryHandler(this.httpRequestRetryHandler());
+        // 设置长连接保持策略
+        builder.setKeepAliveStrategy(this.connectionKeepAliveStrategy());
+
+        // 设置后台线程剔除失效连接
+        builder.evictExpiredConnections();
+        builder.evictIdleConnections(this.httpClientProperties.getMaxIdleTime(), TimeUnit.MILLISECONDS);
 
-        //设置后台线程剔除失效连接
-        httpClientBuilder.evictExpiredConnections();
-        httpClientBuilder.evictIdleConnections(this.httpClientProperties.getMaxIdleTime(), TimeUnit.MILLISECONDS);
-        return httpClientBuilder.build();
+        // 禁用Cookie回话保持功能
+        builder.disableCookieManagement();
+        return builder.build();
     }
 
     @Bean
@@ -123,31 +150,4 @@ public class HttpClientConfigurer {
             }
         };
     }
-
-    /**
-     * 修改默认的消息转换配置
-     *
-     * @param restTemplate RestTemplate实例
-     */
-    private void modifyDefaultMessageConverters(@NonNull RestTemplate restTemplate) {
-        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters().stream()
-                .map(converter -> {
-                    if (converter instanceof StringHttpMessageConverter) {
-                        return new StringHttpMessageConverter(StandardCharsets.UTF_8);
-                    } else if (converter instanceof MappingJackson2HttpMessageConverter) {
-                        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter =
-                                new MappingJackson2HttpMessageConverter(this.objectMapper);
-                        mappingJackson2HttpMessageConverter.setSupportedMediaTypes(
-                                Arrays.asList(
-                                        MediaType.TEXT_PLAIN,
-                                        MediaType.APPLICATION_JSON,
-                                        new MediaType("application", "*+json")
-                                )
-                        );
-                        return mappingJackson2HttpMessageConverter;
-                    }
-                    return converter;
-                }).collect(Collectors.toList());
-        restTemplate.setMessageConverters(messageConverters);
-    }
 }