restTemplate Invalid ‘expires‘ attribute: Sat, 18 Apr 2054 02:50:25 GMT、

服务器后台warning:

分析:

Sat, 18 Apr 2054 02:50:25 GMT、日期解析失败,使用标准的cookie解析方式

解决:

RequestConfig.custom().setConnectionRequestTimeout(connectRequestTimeout) .setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout) .setCookieSpec(CookieSpecs.STANDARD).build();

java 复制代码
	@Bean
	public RestTemplate restTemplate(@Autowired CloseableHttpClient closeableHttpClient) {
		return new RestTemplate(new HttpComponentsClientHttpRequestFactory(closeableHttpClient));
	}
	
@Bean
	public CloseableHttpClient closeableHttpClient() {
		return builder(connectTimeout, connectRequestTimeout, readTimeout);
	}

	private CloseableHttpClient builder(int connectTimeout, int connectRequestTimeout, int socketTimeout) {
		RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connectRequestTimeout)
				.setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout)
				.setCookieSpec(CookieSpecs.STANDARD).build();

		return HttpClients.custom().setConnectionManager(get()).setDefaultRequestConfig(requestConfig)
				.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy() {
					@Override
					public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
						long time = super.getKeepAliveDuration(response, context);
						if (time >= 0) {
							return time;
						}
						return keepAliveTime;
					}
				}).build();
	}

	private PoolingHttpClientConnectionManager get() {
		if (gcm != null) {
			return gcm;
		}
		synchronized (RestConfig.class) {
			Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
					.register("http", PlainConnectionSocketFactory.getSocketFactory())
					.register("https", SSLConnectionSocketFactory.getSocketFactory()).build();
			PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registry);
			manager.setMaxTotal(maxTotal);
			manager.setDefaultMaxPerRoute(maxPerRoute);
			idleThread = new IdleConnectionMonitorThread(manager);
			idleThread.start();
			Runtime.getRuntime().addShutdownHook(new Thread() {
				@Override
				public void run() {
					idleThread.shutdown();
				}
			});

			gcm = manager;
		}
		return gcm;
	}

	// 监控有异常的链接
	private class IdleConnectionMonitorThread extends Thread {
		private final HttpClientConnectionManager connMgr;
		private volatile boolean exitFlag = false;

		public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr) {
			this.connMgr = connMgr;
			setDaemon(true);
		}

		@Override
		public void run() {
			while (!exitFlag) {
				synchronized (this) {
					try {
						wait(2000);
					} catch (InterruptedException e) {
						Thread.currentThread().interrupt();
					}
				}
				// 关闭失效的连接
				connMgr.closeExpiredConnections();
				// 可选的, 关闭指定时间内不活动的连接
				connMgr.closeIdleConnections(30, TimeUnit.SECONDS);
			}
		}

		public void shutdown() {
			exitFlag = true;
		}
	}
复制代码

参考:

Spring Boot 无效的cookie标头:无效的"expires"属性 _大数据知识库

Invalid cookie header: "Set-Cookie: xxx", HttpOnly". Invalid 'expires' attribute报错说明-CSDN博客

HttpClient4 警告: Invalid cookie header 的问题解决_org.apache.http.client.protocol.responseprocesscoo-CSDN博客

相关推荐
阿维的博客日记9 分钟前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI10 分钟前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding1 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路2 小时前
C++ 多线程与并发
java·jvm·c++
AI视觉网奇2 小时前
linux 检索库 判断库是否支持
java·linux·服务器
她的男孩2 小时前
从零搭一个企业后台,为什么我把能力拆成 Starter 和 Plugin
java·后端·架构
RainCity2 小时前
Java Swing 自定义组件库分享(七)
java·笔记·后端
Sam_Deep_Thinking2 小时前
连锁门店的外卖订单平台对接
java·微服务·架构·系统架构
_遥远的救世主_3 小时前
从一次结果集密集型查询 OOM 看 Java 服务的稳定性架构治理
java·后端
一楼的猫3 小时前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作