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

Azure AD Spring Boot认证是否兼容Tomcat 10 WAR部署?

问题解决方案与兼容性说明

一、日志类转换错误的解决办法

错误Cannot cast ch.qos.logback.classic.servlet.LogbackServletContainerInitializer to jakarta.servlet.ServletContainerInitializer的核心原因:

  • Tomcat 10采用Jakarta EE API(包路径jakarta.servlet.*),而Logback旧版本依赖传统Java EE的javax.servlet.*包,两者命名空间不同,导致类型转换失败。
  • 尽管你在Tomcat层面配置了Log4j2,但Spring Boot 3默认依赖Logback作为日志实现,WAR包中可能仍包含Logback相关依赖,引发冲突。

解决步骤:

  1. 在项目POM中排除Spring Boot默认的Logback依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  1. 引入适配Jakarta API的Spring Boot Log4j2启动器:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
  1. 执行mvn dependency:tree命令排查依赖树,确保没有其他依赖间接引入logback-classic包,如有则一并排除。

二、Azure AD认证与Tomcat 10 WAR部署的兼容性

Spring Boot 3/Spring Security 6 对应的Azure AD认证组件(spring-cloud-azure-starter-active-directory)完全兼容Tomcat 10的WAR部署:

  • Spring Boot 3基于Jakarta EE规范开发,天然适配Tomcat 10的API要求;
  • 微软针对Spring Boot 3提供的Azure AD starter已完成Jakarta API迁移,不存在命名空间冲突;
  • 只要项目正确配置Azure AD客户端信息(如spring.cloud.azure.active-directory.tenant-id、client-id等),且WAR包遵循Spring Boot 3的WAR部署规范(如继承SpringBootServletInitializer),即可正常运行。

补充注意:

  • 确保SpringBootServletInitializer实现类使用jakarta.servlet相关API,而非旧的javax.servlet;
  • 检查Tomcat 10的lib目录,避免存在与项目依赖冲突的日志组件。

内容的提问来源于stack exchange,提问作者Bruno Genovese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:15:04