druid监控页面访问不到(druid 监控)

druid监控页面访问不到(druid 监控)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>问题表现&#xff1a;在配置和依赖都正确的情况下&#xff0c;无法通过配置的用户名密码登录Druid的监控页面</p> 

讯享网

在这里插入图片描述
讯享网
检查配置发现 配置的用户名和密码和请求中参数是一致的🤔

Debug发现 ResourceServlet 是Druid的登录实现, 且调试发现usernameParam是null,但是前端请求是看到有参数的。
在这里插入图片描述

开始查看当前线程栈上游都经过了哪些过滤器和拦截器,找到第一个接收前端请求的地方看是否接收到参数,然后发现getParamter()是有值的. 这个时候放开了断点,想再试一次看是哪层丢了值,结果发现页面登录成功了。🤨

仔细调试 org.apache.catalina.connector.Request 类后发现了问题的原因
在这里插入图片描述在这里插入图片描述首先是getParameter方法看起来是get ,实际上还做了惰性的解析的写操作,所以这也是为什么代码规范中推荐get命名的方法不要藏有副作用的逻辑,只能是读操作。
其次解析逻辑中如果符合usingInputStream || usingReader 就会退出不会走后续的解析参数逻辑。

在这里插入图片描述
因为有监控所有请求日志的需求,所以有个Filter负责复制Request内容,此处会触发一次读Request的Body流,然后导致了这次的问题。
由于我在第一个Filter执行前就在Debug中执行了 getParameter 方法,也就触发了parseParameters方法执行,所以Druid的Service就能获取到参数了。
在这里插入图片描述在这里插入图片描述


所以最后解决方案就是在复制Request的Body 去构造 BodyReaderWrapper 前,先调用一次request.getParameter 方法 🤣


小讯
上一篇 2025-04-24 10:58
下一篇 2025-06-01 07:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/146594.html