【BUG排查记】HttpUtil和SpringSecurity结合的坑
一、背景
二、问题描述
三、问题分析
# 使用hutool工具发起远程http请求
HashMap<String, String> headers = getHeader(modelSyncGitDto);
HttpRequest request = HttpUtil.createRequest(Method.POST, url);
HttpResponse execute = request
.addHeaders(headers)
.timeout(2000)
.body(JSONUtil.toJsonStr(modelSyncGitDto))
.execute();
# 通用工具生成jwt token放入header
private HashMap<String, String> getHeader(ModelSyncGitDto modelSyncGitDto){
String userJwtToken = JwtUtils.getJwtToken(filterConfig.getAcSecret(),null,modelSyncGitDto.getComputerUserName(),modelSyncGitDto.getOsName());
HashMap<String, String> headers = new HashMap<>(200);
headers.put("Token", userJwtToken);
return headers;
}
# 被调用方获取token
String token = CookieUtils.resolveCookie(request, tokenKey);
if (Objects.isNull(token) || token.isBlank()){
token = request.getHeader(tokenKey);
}
if (Objects.isNull(token) || token.isBlank()){
token = request.getParameter(tokenKey);
}
return token;
log.info("http请求返回,cookie={}", execute.getCookies());
# 创建request增加禁用cookie
HttpRequest request = HttpUtil.createRequest(Method.POST, url);
HttpResponse execute = request
.disableCookie()
.addHeaders(headers)
.timeout(2000)
.body(JSONUtil.toJsonStr(modelSyncGitDto))
.execute();
四、梅开二度
4.1 配置对比
server:
servlet:
session:
# session超时时间,不能小于1分钟
timeout: 481m
# 浏览器 Cookie 中 SessionID 名称
cookie:
name: Token
path: /
tracking-modes: COOKIE
4.2 二次请求
4.2 日志对比
4.3 终极原因
五、总结
- 本版本hutool的HttpUtil请求缓存了上一次请求的cookie,并在下一次携带;
- Spring Security 默认会将Cookie设置在当前应用所在的域下,即localhost。请求方也为localhost所在节点,由于http同源策略,导致返回的response中存在cookie。
【BUG排查记】HttpUtil和SpringSecurity结合的坑的更多相关文章
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
- Android分组子级的不同视图布局之BUG奇遇记
Android分组子级的不同视图布局之BUG奇遇记 最近在使用按日期分类列表,二级条目可能不一样,于是就想到了ExpandableListView. ExpandableListView的布局显示分割 ...
- 日常Bug排查-系统失去响应-Redis使用不当
日常Bug排查-系统失去响应-Redis使用不当 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 开发反应线上系统出现失去响 ...
- 日常Bug排查-消息不消费
日常Bug排查-消息不消费 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 某天下午,在笔者研究某个问题正high的时候.开 ...
- 日常Bug排查-抛异常不回滚
日常Bug排查-抛异常不回滚 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 最近有人反映java应用操作数据库的时候,抛异 ...
- 日常Bug排查-Nginx重复请求?
日常Bug排查-Nginx重复请求? 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,其中不乏一些看起来很低级但很容易犯的问题. 问题现场 有一天运维突然找到 ...
- wordpress插件bug排查后记(记一次由于开启memecached引起的插件bug)
这篇文章是写给自己的. 周三的时候我在维护公司的一个wordpress项目页面时发现了一个非常奇怪的情况:当我尝试更新网站上的一个页面后,在wordpress后台的编辑器中发现其内容并没有按我预期的将 ...
- 记一次偶发的bug排查——redis-py-cluster库的bug
排查流水账: 通过平台监控,发现很多偶发的查看推荐列表的接口时延大于0.5s 写单元测试,不能重现.在测试环境不能重现.只有在正式环境可以偶发重现. 通过日志埋点,等待重现 不断地加日志埋点后发现耗 ...
- 团队项目-BUG排查-ADT工程 To Android Studio 一整天的排查日记
4-22 10:44至4-23 0:45 ①打开Eclipse从Github上Clone MathsApp到本机,报错'Unable to resolve target'android-19' ②尝试 ...
- 一次压力测试Bug排查-epoll使用避坑指南
Bug复现 使用Webbench对服务器进行压力测试,创建1000个客户端,并发访问服务器10s,正常情况下有接近8万个HTTP请求访问服务器. 结果显示仅有7个请求被成功处理,0个请求处理失败,服务 ...
随机推荐
- JS 通过后台接口返回的URL地址下载文件并保存到本地(已在项目中使用,保存音视频文件)
今天做antdV表格勾选下载操作时,因为粗心大意碰到了下载问题,特此记录~ 一.单个文件下载逻辑代码如下: const exportFile = (data, fileName, _this)=> ...
- C# 删除Word文档中的段落
在编辑Word文档时,我们有时需要调整段落的布局.删除不必要的段落以优化文档的结构和阅读体验.本文将通过以下3个简单示例演示如何使用免费.NET库删除Word文档中的段落 . C# 删除Word中的指 ...
- Flink CDC 与Hudi整合
介绍 之前写过Flink CDC sink 到 Iceberg中,本篇主要实践如何CDC到hudi中. 什么是hudi? Hudi is a rich platform to build stream ...
- 远程连接Docker服务
背景 本地开发了一个SpringBoot项目,想通过Docker部署起来,我本地是Window10系统,由于某些原因不能虚拟化并且未安装Docker-Desktop,所以我在想有没有办法本地不需要虚拟 ...
- Postman接口测试应用
接口测试可以通过工具(postman/jmeter).自动化测试(python+requests+开源框架)两种方式进行测试 接口测试可以在单元测试之后开始进行,不用关注前端页面有没有形成,也可以渗透 ...
- html代码新手教学
HTML 是超文本标记语言(HyperText Markup Language)的缩写,是用来描述网页结构的标记语言.在这篇教学中,我们将介绍一些 HTML 基础知识,帮助新手快速学习并掌握如何编写简 ...
- 一键生成美观的彩页演示+AI的训练过程科普
一键生成美观彩页 + AI训练揭秘:让你的内容瞬间高大上! 阅读时间: 8分钟 | 字数: 1300+ 你是否曾为制作精美的演示文稿而烦恼?是否对AI的训练过程充满好奇?今天,让我们一起探索如何用AI ...
- Docker容器内服务自启动解决方案
背景 在很多场景下,我们需要拉取或者是使用的别人的容器,但是有些容器内部的服务并不能自启动,比如Apache服务.mysql服务等等,对于数量较少的容器来讲,我们可以进入容器中使用命令将服务进行启动, ...
- python socket检测端口及ping检测
python根据socket模块检测端口及vip #!/usr/bin/env python # -*- coding: utf8 -*- from .ping_helper import Pinge ...
- 【深入Java虚拟机】之七:Java编译与JIT编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...