Spring Boot 3.x使用SiteMesh3的过滤器兼容问题及解决咨询
Spring Boot 3 下 SiteMesh Filter 类型不兼容问题解决方案
核心原因:Spring Boot 3 全面采用 Jakarta EE 规范,所有 Servlet 相关 API 从javax.servlet迁移到jakarta.servlet;而你当前使用的ConfigurableSiteMeshFilter属于旧版 SiteMesh,仅实现了javax.servlet.Filter,无法适配 Spring Boot 3 要求的jakarta.servlet.Filter类型,因此出现类型不匹配报错。
解决步骤:
替换为支持 Jakarta 的 SiteMesh 版本
需要使用适配 Jakarta EE 的 SiteMesh 分支,Maven 中可引入以下依赖(以 SiteMesh 4 稳定版为例):<dependency> <groupId>org.sitemesh</groupId> <artifactId>sitemesh-jakarta</artifactId> <version>4.0.1</version> </dependency>注意:移除之前引入的旧版
sitemesh依赖,避免包冲突。调整代码中的包引用
替换所有旧版 SiteMesh 的导入,改为 Jakarta 版本的类。你的WebSiteMeshFilter需要继承 Jakarta 版的ConfigurableSiteMeshFilter(该类已实现jakarta.servlet.Filter),调整后的代码:import org.sitemesh.config.ConfigurableSiteMeshFilter; import org.sitemesh.builder.SiteMeshFilterBuilder; public class WebSiteMeshFilter extends ConfigurableSiteMeshFilter { @Override protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) { builder.addDecoratorPath("/*", "/WEB-INF/views/decorator.jsp"); } }配置类无需修改
你的WebSiteMeshConfig配置类保持原样即可,因为新的WebSiteMeshFilter已实现jakarta.servlet.Filter,能正常被FilterRegistrationBean的setFilter方法接收。
完成以上调整后重新编译运行,即可解决类型不兼容的报错。
内容的提问来源于stack exchange,提问作者張富堯
相关产品推荐
相关产品推荐

