Spring项目中修改javamelody映射url以及其它参数失效的问题

简介: 首先,servlet3.0支持模块化,在jar包中如果有web-fragmenet.xml,则servlet容器会先加载web.xml里的listener、filter和servlet,再加载web-fragment.xml里的组件。关于模块化的介绍:

首先,servlet3.0支持模块化,在jar包中如果有web-fragmenet.xml,则servlet容器会先加载web.xml里的listener、filter和servlet,再加载web-fragment.xml里的组件。关于模块化的介绍:


https://blog.csdn.net/chunxiaqiudong5/article/details/52840088

8.png

在javamelody-core中的META-INF目录下有一个web-fragment.xml文件,内容如下:

从上面文件中可以看出,当servlet容器启动时,会注册javamelody中定义的MonitoringFilter和SessionListener,MonitoringFilter默认的映射url为/monitoring。


此时我们想修改映射地址或者指定用户才能登录,有人在web.xml也配置了一个MonitoringFilter,如下:

10.png启动servlet容器后,输入localhost:8080/xxx/admin,出现404,然后再输入localhost:8080/xxx/monitoring,发现javamelody的监控页面出来了。


为什么自己定义的/admin没有起作用,文章开头已经说了,servlet容器会先加载web.xml,然后是web-fragment.xml,但是这个又和加载顺序有什么关系了,难道说后加载的会覆盖先加载的配置吗,答案是yes。


点开MonitoringFilter源码,看下面一段代码:

11.png

在doFilter这个方面里,有一个getMonitoringUrl()的方法,这个方法是用来获取init-param中的配置的monitoring-path中的参数值,也就是映射url。如果请求地址和配置的monitoring-path路径一致,则会看到监控页面。刚才输入/admin无效,说明getMonitoringUrl()返回的并不是/admin,点进这个方法:


12.png

这里可以看出,paramterValue应该是我们配置的url,是从Parameters.getParameter()中获取的,Parameter是一个枚举,点进Parameters.getParameter()方法:

13.png

我们配置的url是从FilterConfig实例中取出来的,而FilterConfig是从哪里来的呢,在Filter实现类里重写了init(FilterConfig config)方法。

14.png


在这里,FilterConfig被注入,点进这个方法,

15.png

filterConfig为类变量,如果我们在web.xml里配置了MonitoringFilter,首先执行该MonitoringFIlter实例的init方法,然后再执行web-fragment.xml中MonitoringFilter实例的init()方法,所以Prameters类中的类变量FilterConfig总是后面web-fragment.xml配置的MonitoringFilter的FilterConfig。


解决办法:


在web.xml中定义一个MonitoringFilter,并将名字设为javamelody,与javamelody包中的一致。ServletContext不会加载同名的Filter,故web-fragment.xml中的MonitoringFilter不会添加,如下:

16.png


相关文章
|
6月前
|
数据采集 人工智能 Java
1天消化完Spring全家桶文档!DevDocs:一键深度解析开发文档,自动发现子URL并建立图谱
DevDocs是一款基于智能爬虫技术的开源工具,支持1-5层深度网站结构解析,能将技术文档处理时间从数周缩短至几小时,并提供Markdown/JSON格式输出与AI工具无缝集成。
237 1
1天消化完Spring全家桶文档!DevDocs:一键深度解析开发文档,自动发现子URL并建立图谱
|
3月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
6月前
|
前端开发 安全 Java
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
235 0
|
3月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
291 4
|
3月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
166 0
|
3月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
294 0
|
3月前
|
前端开发 Java API
酒店管理系统基于 JavaFX Spring Boot 和 React 经典项目重构实操
本文介绍了基于现代技术栈的酒店管理系统开发方案,整合了JavaFX、Spring Boot和React三大技术框架。系统采用前后端分离架构,JavaFX构建桌面客户端,React开发Web管理界面,Spring Boot提供RESTful API后端服务。核心功能模块包括客房管理和客户预订流程,文中提供了JavaFX实现的客房管理界面代码示例和React开发的预订组件代码,展示了如何实现客房信息展示、添加修改操作以及在线预订功能。
206 1
|
3月前
|
Java 应用服务中间件 Maven
第01课:Spring Boot开发环境搭建和项目启动
第01课:Spring Boot开发环境搭建和项目启动
513 0
|
6月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
368 4