这个问题是由于Spring的`CharacterEncodingFilter`类和Jakarta Servlet的`Filter`类的类加载器不同导致的。在这种情况下,`CharacterEncodingFilter`不能被强制转换为`Filter`。
这个问题通常发生在你尝试在Tomcat 10或更高版本上运行使用Spring 5或更低版本的应用时。Tomcat 10开始使用Jakarta Servlet API,而Spring 5仍然使用的是Java EE Servlet API。这两个API在包名上有所不同,Java EE的包名是`javax.servlet`,而Jakarta的包名是`jakarta.servlet`。
解决这个问题的一种方法是降级你的Tomcat版本到9或更低,这些版本仍然使用Java EE Servlet API。另一种方法是升级你的Spring版本到5.3或更高,这些版本开始支持Jakarta Servlet API。
我使用的是把Tomcat版本改为9,成功解决