Tomcat启动CorsFilter报错:ClassCastException问题排查求助
问题分析与排查指南
从你提供的Tomcat报错日志和项目信息来看,核心问题非常清晰:Tomcat一直在尝试把com.reviewmyprof.webservice.book.Book这个普通业务类当作Servlet Filter来初始化,但Book类根本没有实现javax.servlet.Filter接口,所以直接触发了类型转换异常。
虽然你说已经移除了web.xml里错误的CorsFilter配置,但Tomcat还是抛出了这个错误,下面是几个你需要重点排查的方向:
1. 确认Tomcat实际加载的web.xml是否真的移除了错误配置
有时候我们修改了本地的web.xml,但部署到Tomcat的版本并没有同步更新:
- 直接找到Tomcat部署目录下你的项目
WEB-INF文件夹,打开里面的web.xml,检查是否还存在那段错误的<filter>配置 - 如果是用IDE(比如NetBeans,从日志里的监控Filter能看出来)开发,注意看编译后的
target目录里的web.xml是否是最新版本,Tomcat通常加载的是编译后的文件
2. 彻底清理Tomcat的缓存与临时文件
Tomcat会缓存已部署应用的资源,即使你更新了配置,旧的缓存可能还在生效:
- 先完全停止Tomcat服务
- 删除Tomcat安装目录下的
work文件夹(这里存储了编译后的JSP、类缓存等内容) - 删除Tomcat
webapps目录下你的项目文件夹(如果是WAR包部署,同时删除WAR包和解压后的文件夹) - 重新打包项目,手动部署到Tomcat后再启动服务
3. 检查是否存在其他Filter配置来源
Servlet 3.0及以上版本支持多种Filter配置方式,不止web.xml:
- 打开
com.reviewmyprof.webservice.book.Book类,检查是否误加了@WebFilter注解,如果有,立刻移除 - 排查项目中是否存在
web-fragment.xml这类扩展配置文件,里面可能也定义了错误的CorsFilter
4. 验证IDE的部署同步设置
如果你用NetBeans开发,可能存在自动部署不同步的问题:
- 执行IDE的"Clean and Build"操作,彻底清理旧的编译产物
- 手动触发重新部署,确保最新的web.xml被同步到Tomcat
额外提示
你之前把Book类配置为CorsFilter的做法本身就是错误的——CorsFilter必须实现javax.servlet.Filter接口,或者你可以直接使用Tomcat自带的org.apache.catalina.filters.CorsFilter来实现跨域支持,后续如果还要配置跨域,记得指定正确的Filter实现类。
内容的提问来源于stack exchange,提问作者root
相关产品推荐
相关产品推荐

