Spring Security配置部署Tomcat10时遇UnsupportedOperationException求助
Spring Security部署Tomcat10报错的解决方法
问题根源
Tomcat 10严格遵循Servlet 3.0规范第4.4节,Spring Security自动注册的ServletContextListener未被正确标记为合法监听器,导致初始化时调用了规范禁止的方法,触发java.lang.UnsupportedOperationException。
修复步骤
显式开启Servlet组件扫描
在Spring主配置类上添加@ServletComponentScan注解,让容器自动识别并注册带有@WebListener的组件:import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ServletComponentScan public class AppConfig { // 已有配置保持不变 }手动初始化Spring Security
创建继承AbstractSecurityWebApplicationInitializer的类,替代自动配置来注册监听器和过滤器,确保符合Servlet规范:import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer { // 无需编写额外代码,此类会自动完成Spring Security的初始化注册 }排查依赖冲突
检查pom.xml,确保所有Servlet相关依赖都是Jakarta EE 9+版本(jakarta.servlet开头),排除旧版javax.servlet依赖:<!-- 正确的Servlet API依赖 --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <!-- Spring Security Web依赖 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>6.1.2</version> </dependency>临时Tomcat配置调整(不推荐长期使用)
若以上方法无效,可修改Tomcat的context.xml,添加allowCasualMultipartParsing="true"临时绕过规范检查:<Context allowCasualMultipartParsing="true"> <!-- 原有配置内容 --> </Context>
内容的提问来源于stack exchange,提问作者Kleber Mota
相关产品推荐
相关产品推荐

