当前位置: 首页 > article >正文

PingCraft:从需求文档到可追踪工作项的 Agent 实践之路固

整体排查思路我们的目标是验证以下三个环节是否正常登录成功时服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。浏览器端浏览器是否成功接收并存储了该Cookie。后续请求浏览器在执行查询等操作时是否始终在请求头中携带了这个Cookie。第一步浏览器端跟踪客户端验证这是最直接、最容易操作的第一步可以由开发或运维人员在问题电脑上进行。一、跟踪会话标识Cookie的接收与存储开启浏览器开发者工具使用出现问题的浏览器如奇安信、Chrome按 F12打开开发者工具。切换到Network/网络面板勾选 Preserve log(保留日志)? 复选框防止页面跳转时日志被清空。清空Cookie可选为了纯净的测试在开发者工具的 Application应用或 Storage存储标签页下找到 Cookies选中当前系统地址的Cookie将其删除。这可以模拟一次全新的登录。执行登录在Network面板中找到登录请求通常是 login或 j_spring_security_check之类的POST请求。重点查看登录请求的响应点击这个登录请求查看 Response Headers响应头。你应该能看到一个 Set-Cookie头内容类似于 JSESSIONIDABCD1234...; Path/; HttpOnly。记录下这个 JSESSIONID的值。验证Cookie存储切换到 Application/应用标签页。在左侧找到 Cookies- http://10.15.9.106。检查是否存在一个名为 JSESSIONID的Cookie其值是否与刚才在响应头中看到的一致。至此我们验证了环节1和2。如果这里就出问题那么根源在服务器响应或浏览器安全策略上。二、跟踪后续请求的Cookie携带情况进行正常操作登录成功后在系统内进行一些不会触发闪退的简单操作比如点击菜单。观察请求在Network面板中观察这些操作触发的Ajax或页面请求。检查请求头随机点击几个后续请求查看它们的 Request Headers请求头。必须找到一个 Cookie:头其内容应包含 JSESSIONIDABCD1234...即登录时设置的那个值。确保每个请求都携带了这个Cookie。触发闪退关键步骤进行那个已知会引发闪退的查询操作。密切观察Network面板在点击“查询”按钮后瞬间发出的请求。重点检查触发闪退的那个特定查询请求情况A正常该请求的 Request Headers里正常携带了 JSESSIONID但服务器返回了一个 302 Found状态码Location指向登录页或者直接返回了登录页的HTML状态码200。这说明问题出在服务器端服务器主动废弃了会话。情况B异常该请求的 Request Headers里没有? Cookie头或者 JSESSIONID的值变成了空、错误或一个新的值。这说明问题出在浏览器端Cookie在发送前丢失了。第二步服务器端跟踪代码与日志层面如果浏览器端跟踪指向了“情况A”Cookie携带正常但服务器返回登录页那么问题根因在服务器内部。一、启用详细日志记录最有效的方法如果这个老系统可能日志不全我们需要临时增加会话跟踪日志。1.在web.xml中配置Session监听器创建一个类实现 HttpSessionListener和 HttpSessionAttributeListener接口并部署到生产环境。这个类可以记录Session的创建、销毁和属性变化。import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import java.util.logging.Logger; // 或使用Log4j、Slf4jpublic class SessionDebugListener implements HttpSessionListener, HttpSessionAttributeListener {private static final Logger logger Logger.getLogger(SessionDebugListener.class.getName());Overridepublic void sessionCreated(HttpSessionEvent se) {logger.info( Session被创建: ID se.getSession().getId() 时间 new java.util.Date());}Overridepublic void sessionDestroyed(HttpSessionEvent se) {// 这是最关键的信息会话何时、为何被销毁logger.info( Session被销毁: ID se.getSession().getId() 时间 new java.util.Date() 。 最后访问时间: new java.util.Date(se.getSession().getLastAccessedTime()));// 可以在这里打印堆栈信息看是哪个线程触发了销毁Thread.dumpStack();}Overridepublic void attributeAdded(HttpSessionBindingEvent event) {if (user.equals(event.getName())) { // 监听用户登录属性logger.info( 用户登录成功User对象被存入Session。 SessionID event.getSession().getId() , User event.getValue());}}Overridepublic void attributeRemoved(HttpSessionBindingEvent event) {if (user.equals(event.getName())) { // 监听用户登出属性logger.info( 用户登出User对象从Session移除。 SessionID event.getSession().getId());}}}在 web.xml中注册com.yourcompany.SessionDebugListener2.在过滤器中记录请求在一个全局的Filter中如果已有则修改它记录每个请求的Session状态。public class SessionTrackingFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req (HttpServletRequest) request;HttpServletResponse res (HttpServletResponse) response;String sessionId req.getRequestedSessionId();boolean sessionValid req.isRequestedSessionIdValid();logger.info(请求进入: URI req.getRequestURI() , SessionID sessionId , Session是否有效 sessionValid);chain.doFilter(request, response);// 请求处理后再次检查Session状态sessionValid req.isRequestedSessionIdValid();logger.info(请求离开: URI req.getRequestURI() , Session是否有效 sessionValid);}}部署这些监听器和过滤器后重现闪退问题。然后立即查看服务器日志寻找 Session被销毁这条关键日志。它会告诉你Session被销毁的精确时间结合堆栈信息就能定位到是哪个代码路径或配置触发了销毁。二、分析服务器线程栈如果怀疑是会话锁超时需要在闪退发生时立刻获取服务器的线程堆栈快照jstack 。分析快照看是否有线程长时间持有Session锁状态为 RUNNABLE且正在执行查询SQL而其他线程在等待这个锁状态为 BLOCKED。总结跟踪流程一览表步骤跟踪点方法期望结果异常结果与含义1?浏览器接收Cookie?F12 - Network - 查看登录请求的 Set-Cookie响应头收到正确的 JSESSIONID未收到服务器响应问题2?浏览器存储Cookie?F12 - Application - Cookies存储了正确的 JSESSIONID未存储浏览器安全策略阻止3?后续请求携带Cookie?F12 - Network - 查看查询请求的 Cookie请求头携带了登录时的 JSESSIONID未携带/值错误浏览器端Cookie丢失4?服务器处理请求?查看服务器日志/监听器日志Session有效请求正常处理日志显示Session被销毁服务器端主动废弃会话5?服务器并发情况?分析线程堆栈快照 (jstack)无长时间锁等待有线程因等待Session锁而阻塞会话锁超时问题请按照这个流程进行操作很大概率能直接定位到问题发生的具体环节。先从浏览器端跟踪开始这通常能给出最直接的线索。揪涎徘挖

相关文章:

PingCraft:从需求文档到可追踪工作项的 Agent 实践之路固

整体排查思路 我们的目标是验证以下三个环节是否正常: 登录成功时:服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端:浏览器是否成功接收并存储了该Cookie。 后续请求:浏览器在执行查询等操作…...

彻底告别OpenClaw使用焦虑:我给他装上了“透视眼”和“批量克隆模组尚

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

嵌入式TFTP服务器库TFTPServer深度解析与移植指南

1. TFTPServer嵌入式TFTP服务器库深度解析TFTP(Trivial File Transfer Protocol)作为轻量级文件传输协议,在嵌入式系统固件升级、配置文件下发、日志回传等场景中具有不可替代的地位。其基于UDP的无连接特性、极简的状态机设计、零会话开销等…...

JMS, ActiveMQ 学习一则亓

开发个什么Skill呢? 通过 Skill,我们可以将某些能力进行模块化封装,从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践:创建一个用于自动生成 Skill 的 Skill,一是用…...

Mysql 11: 存储过程全解——从创建到使用

存储过程(Stored Procedure)是 MySQL 中预编译在数据库服务器上的 SQL 语句集合,可以封装复杂业务逻辑、减少网络交互、提升执行效率,是数据库开发的核心技能。本文围绕图片中的知识点,从创建、使用、删除到拓展&#…...

龙芯k - 久久派开发环境搭建及内核升级(上)撞

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

计及阴影遮挡效应的光伏阵列拓扑 PSO 重构优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

XLR8Servo_vhdl:FPGA硬件加速的高精度伺服控制方案

1. XLR8Servo_vhdl 加速伺服控制库深度解析1.1 项目定位与工程痛点XLR8Servo_vhdl 是专为 Alorium Technology XLR8 开发板设计的硬件加速型伺服电机控制库,其核心目标是彻底解决传统 Arduino Servo 库在实时性、资源占用和功能冲突三大维度上的固有缺陷。该库并非软…...

计及能量枢纽(EH)精细化建模的源荷储协调优化:通过矩阵建模法描述能源转换效率,利用分支定界法求解多能转换的最优路径研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

AX-12A舵机底层驱动与Dynamixel协议实战解析

1. AX-12A智能舵机底层驱动技术解析AX-12A是由韩国Robotis公司推出的经典串行总线式智能舵机,自2004年发布以来,已成为教育机器人、仿生机构与小型机电系统中事实上的工业级执行器标准。其核心价值不仅在于300可编程角度范围、12V供电下1.5Nm额定扭矩与内…...

影视专业生的C语言学习

我是一个来自影视专业的一个学生,但是往后看了这个专业出路并不适合我,所以自学c语言等技能来提升自己,为自己以后找工作多一个选项。学习编程的目标:熟练掌握c语言以及c我打算每周花20小时的时间来学习编程最想进入的公司是字节跳…...

态势感知中态与势的条件概率与联合概率

这是一个关于态势感知(Situation Awareness, SA)理论中核心概念"态"(State)与"势"(Trend/Development)的概率建模问题。下面将从概率论与贝叶斯网络的角度,系统阐述态与势的…...

AD9833 DDS信号发生器驱动设计与嵌入式实践

1. AD9833信号发生器模块底层驱动技术解析AD9833是一款由Analog Devices(ADI)推出的低功耗、可编程波形发生器芯片,采用28引脚SSOP封装,通过标准SPI接口与主控MCU通信。其核心功能是生成高精度、频率可调的正弦波、三角波和方波信…...

RK3588嵌入式Linux开发实战:uboot镜像合成与rkbin文件整合指南

1. RK3588开发必备:理解uboot镜像合成的核心意义 刚接触RK3588开发板时,很多工程师都会困惑:为什么编译好的uboot不能直接烧录?这个问题我最初也踩过坑。实际上,Rockchip平台的启动流程比传统嵌入式系统更复杂&#xf…...

有没有类似trello或者teambition的本地版的任务管理工具?盘点7款

很多企业在找任务管理工具时,最先想到的是 Trello 这类看板工具,或者 Teambition 这类团队协作平台。问题也往往出在这里:在线版好上手,但一旦涉及内网部署、数据分级、权限审计、长期留存、与内部系统打通,纯 SaaS 方…...

NGLedFlasher:嵌入式多LED非阻塞时序控制库

1. NGLedFlasher 库深度解析:面向嵌入式系统的多LED非阻塞时序控制方案1.1 项目定位与工程价值NGLedFlasher 是一个轻量级、无阻塞(non-blocking)的 Arduino 兼容库,其核心设计目标并非简单实现“LED闪烁”,而是解决嵌…...

LLM 算法岗 | 八股问答()· 强化学习与 RLHF碧

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

Google疯了!AI全面免费,这下全网都要变天了!

太特么疯狂了!谷歌刚刚发布的 Gemma 4 开源模型,简直是要了所有付费 AI 的命,整个行业的游戏规则被瞬间掀翻。划重点:AI 彻底进入“白嫖时代”了!你现在完全可以利用 Ollama 这类工具,把 Gemma 4 直接接进 …...

不用二维码、不用车载定位,这篇论文把 AGV 视觉导航换了个思路

这篇 AGV 视觉论文很有意思:车上几乎不装定位传感器,靠“车间上方一只相机”也能导航? 摘要 这次换一篇和前面几篇都不重复的 AGV 视觉论文,不讲托盘检测、不讲叉车装卸、也不讲天花板视觉里程计,而是分析一篇很有“工…...

【CANNBot学习周】4.13~4.16入门课程来袭

经历了上一期“CANNBot发布:畅享算子开发新体验”,相信你对解锁智能化昇腾CANN算子开发已经跃跃欲试。 CANNBot学习周入门课程来袭,包含4门从易到难的实操课程,带你从 0 到 1 掌握核心技能!课程覆盖Ascend C、PyPTO和…...

javaSE之图书管理系统

思路:一个图书管理系统项目的构建本次的代码是实现一个图书管理系统要求,有登入系统和用户选择系统,之后还有用户操作交换系统,和图书管理系统,具体思路如下创建以下类,加粗部分为包test:Testbo…...

论文复现基于改进人工鱼群法的机器人,无人机,无人车,无人船的路径规划算法,MATLAB

论文复现基于改进人工鱼群法的机器人,无人机,无人车,无人船的路径规划算法,MATLAB 在基本算法中加入了自适应视野和步长,加入了启发选择机制 该代码运行结果是那四个栅格地图的一个,只包含IAFSA的结果 运行…...

鱼皮超级智能体文件读写报错

Spring AI Kryo 序列化报错:Encountered unregistered class ID 解决方案在开发 Spring AI 聊天记忆功能时,采用 Kryo 实现消息的文件持久化存储,运行过程中突然报出 com.esotericsoftware.kryo.KryoException: Encountered unregistered cl…...

去哪儿商户端分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 部分python代码data {"departur…...

安装 Nunchaku

1、查看torch版本 命令行输入 C:\Users\用户名\Documents\ComfyUI\.venv\Scripts> python -m pip show torch 输出 版本信息 Name: torch Version: 2.11.0 2、查看python版本 输入命令: PS C:\Users\用户名\Documents\ComfyUI\.venv\Scripts> python --versio…...

Jetson Nano + 镭神16线雷达:手把手教你将TARE自主探索算法部署到阿克曼机器人

Jetson Nano与镭神16线雷达:TARE算法在阿克曼机器人上的实战部署指南 硬件选型与系统架构设计 当我们需要将TARE自主探索算法部署到真实机器人平台时,硬件选型直接决定了后续开发流程的顺畅程度。经过多次项目实践,我发现Jetson Nano开发板与…...

Docker部署Ollama模型墒

前言 Kubernetes 本身并不复杂,是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps,这些基础组件简单直接,甚至显得有些枯燥。但后来我…...

嵌入式设备电量显示实战:MCP3421 ADC采集从原理到代码全解析(附避坑指南)

嵌入式设备电量显示实战:MCP3421 ADC采集从原理到代码全解析(附避坑指南) 在移动设备与物联网终端的设计中,精确的电量监测如同设备的"生命体征监测仪"——它不仅关乎用户体验,更直接影响系统稳定性。传统电…...

手机维修师傅的“内功心法”:看懂手机屏排线上的MIPI、I2C、SPI信号,快速定位不开机、花屏、触摸失灵故障

手机维修实战:通过屏排线信号诊断显示与触摸故障的黄金法则 当你面对一部摔落后屏幕全黑但能听见系统声音的iPhone,或是进水后出现彩色条纹的安卓手机时,90%的维修师傅会直接更换屏幕总成。而真正的高手,会拿起万用表和示波器&…...

FastbootEnhance:5步掌握Windows平台最强安卓刷机工具

FastbootEnhance:5步掌握Windows平台最强安卓刷机工具 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 还在为复杂的Fastboot命令行操作…...