【问题标题】:SEVERE: Exception springSecurityFilterChain... ClassCastException... DelegatingFilterProxy cannot be cast严重:异常 springSecurityFilterChain...ClassCastException...DelegatingFilterProxy 无法强制转换
【发布时间】:2011-10-10 03:31:37
【问题描述】:

谁能帮我解决我的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)

【问题讨论】:

    标签: tomcat classcastexception


    【解决方案1】:

    您的依赖项之一是在您的 war 文件中包含一个 servlet-api,这会导致该行为。使用 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>
    

    您也需要对其他 servlet-api 执行此操作(例如 org.mortbay.jetty:servlet-api, ..)。

    【讨论】:

      【解决方案2】:

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

      my-web-project-> 属性 -> 部署程序集

      并删除它。其他人指出,在 maven 项目上,servlet-api 依赖的范围必须设置为'provided'

      【讨论】:

        【解决方案3】:

        我在添加 CXF 的依赖项时遇到了类似的问题。我尝试了上述推荐的从该依赖项中排除 javax.servlet 的方法,但它没有用 - 但添加提供的解决了它。 对您来说可能会有所不同,但值得一试。

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

        如果我回答了您的问题,请注明。 ;)

        【讨论】:

          【解决方案4】:

          通过排除 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>
          

          确定哪些 jar 文件包含错误 uas,方法是扫描 WEB-INF/lib 文件夹中的每个 jar 文件以查找其包含的类。即

          jar tvf <jar-file>
          

          【讨论】:

            【解决方案5】:

            可能在你配置的 web.xml 中

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

            但它是过滤器。所以将 servlet 更改为过滤器。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-09-03
              • 1970-01-01
              • 1970-01-01
              • 2017-04-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多