You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者張富堯

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:31