Tomcat 严重:springSecurityFilterChain异常。。。ClassCastException。。。无法强制转换DelegatingFilterProxy

Tomcat 严重:springSecurityFilterChain异常。。。ClassCastException。。。无法强制转换DelegatingFilterProxy,tomcat,classcastexception,Tomcat,Classcastexception,有人能帮我解决我的tomcat运行错误吗?我在运行tomcat时遇到以下错误: SEVERE: Exception starting filter springSecurityFilterChain java.lang.ClassCastException: org.springframework.web.filter.DelegatingFilterProxy cannot be cast to javax.servlet.Filter at org.apache.catalina.c

有人能帮我解决我的tomcat运行错误吗?我在运行tomcat时遇到以下错误:

SEVERE: Exception starting filter springSecurityFilterChain
java.lang.ClassCastException: org.springframework.web.filter.DelegatingFilterProxy cannot be cast to javax.servlet.Filter
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
    at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:533)
    at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:239)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
严重:启动筛选器springSecurityFilterChain时出现异常
java.lang.ClassCastException:org.springframework.web.filter.DelegatingFilterProxy不能强制转换为javax.servlet.filter
位于org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
位于org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
位于org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:115)
位于org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
位于org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
位于org.apache.catalina.startup.Embedded.start(Embedded.java:825)
位于org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:533)
位于org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:239)
位于org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.ExecuteGals(DefaultLifecycleExecutor.java:694)
位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.ExecuteGalandReadLifeures(DefaultLifecycleExecutor.java:387)
位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
位于org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
位于org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
位于org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
位于org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
位于org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
位于org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
位于org.codehaus.classworlds.Launcher.main(Launcher.java:375)

我可以通过从部署程序集中(在eclipse中)删除servlet-api.jar来解决这个问题

我的web项目->属性->部署程序集


并将其移除。其他人则表示,在maven项目上,servlet api依赖项的范围必须设置为“提供”

您的一个依赖项将servlet api包含到war文件中,从而导致该行为。使用mvn dependency:tree,您可以找出哪一个是您的依赖项。之后,您需要排除servlet api,如下所示:

<dependency>
  <groupId>[VALUE]</groupId>
  <artifactId>[VALUE]</artifactId>
  <version>[VALUE]</version>
  <exclusions>
    <exclusion>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>

[价值]
[价值]
[价值]
javax.servlet
servlet api

您还需要为其他servlet api(例如org.mortbay.jetty:servlet api,…)执行此操作。

我在为CXF添加依赖项时遇到了类似的问题。我尝试了上面推荐的将javax.servlet从该依赖项中排除的方法,但它不起作用-但添加提供了解决方法。 这对你来说可能是另一种情况,但值得一试

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-bundle-jaxrs</artifactId>
        <version>2.2.9</version>
        <scope>provided</scope>
    </dependency>

org.apache.cxf
cxf束jaxrs
2.2.9
假如

如果我回答了你的问题,请记下来

通过排除geronimo解决了类似的问题

        <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>3.0.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-servlet_2.5_spec</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-servlet_3.0_spec</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

org.apache.cxf
cxf rt传输http jetty
3.0.3
org.apache.geronimo.specs
geronimo-servlet_2.5_规范
org.apache.geronimo.specs
geronimo-servlet_3.0_规范
通过扫描WEB-INF/lib文件夹中的每个jar文件以查找其中包含的类,确定哪些jar文件包含错误uas。即

jar tvf <jar-file>
jar-tvf

可能在您配置的web.xml中

<servlet>
    <servlet-name>springSecurityFilterChain</servlet-name>
    <servlet-class>org.springframework.web.filter.DelegatingFilterProxy</servlet-class>
</servlet>

springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
但它是过滤器。所以将servlet更改为过滤器