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博客

相关推荐
重生之后端学习1 小时前
78. 子集
java·数据结构·算法·职场和发展·深度优先
那起舞的日子1 小时前
斐波那契数列
java·算法
想用offer打牌2 小时前
一站式了解接口防刷(限流)的基本操作
java·后端·架构
姜源Jerry2 小时前
【Trae】Trae IDE&SOLO浅尝
java·ide·ai
宇木灵2 小时前
C语言基础-三、流程控制语句
java·c语言·前端
小杨互联网4 小时前
项目CyberScan Pro jar软件安全成分分析插件
java·jar·软件成分分析·jar安全分析
组合缺一4 小时前
Java 版 Claude Code CLI 来了!(国产开源项目)Solon Code CLI 发布
java·ai·开源·llm·solon·cli·claudecode
javaIsGood_5 小时前
Java基础面试题
java·开发语言
indexsunny5 小时前
互联网大厂Java求职面试实战:基于电商场景的技术问答及解析
java·spring boot·redis·kafka·security·microservices·面试指导
马克Markorg5 小时前
SpringBoot + LangChain4j 打造企业级 RAG 智能知识库,多工具集成方案
spring boot·向量数据库·rag·qdrant·langchain4j·增强知识检索库